2017-08-01 2 views
0

Nous avons donc une personne avec un nom. Un prénom et un nom. Insérons la personne avec le prénom et le nom et interroger la personne par son nom. Comment?gorm + go + pg: requête pour apparentée

package main 

import (
    "fmt" 
    "log" 

    "github.com/jinzhu/gorm" 
) 

var (
    pgHost  string 
    pgUser  string 
    pgDatabase string 
    pgPass  string 
) 

type Person struct { 
    gorm.Model 
    Name *Name 
    NameID uint 
} 

type Name struct { 
    gorm.Model 
    PersonID uint 
    First string 
    Last  string 
} 

func main() { 
    // let's assume they're set 
    db, e := gorm.Open("postgres", fmt.Sprintf("host=%s user=%s dbname=%s password=%s sslmode=disable", pgHost, pgUser, pgDatabase, pgPass)) 
    if e != nil { 
     log.Fatal(e) 
    } 
    defer db.Close() 

    db.AutoMigrate(&Person{}, &Name{}) 

    p := &Person{ 
     Name: &Name{First: "First", Last: "Last"}, 
    } 

    tx := db.Begin() 
    if c := tx.Create(p); c.Error != nil { 
     log.Fatal("tx.create", c.Error) 
    } 
    tx.Commit() 

    // let's find it 

    pq := &Person{Name: &Name{First: "First"}} 
    pr := new(Person) 

    if c := db.Where(pq).First(pr); c.Error != nil { 
     log.Fatal("db.Where", c.Error) 
    } 
} 

Message d'erreur

converting Exec argument $1 type: unsupported type Name, a struct

Ne hésitez pas à proposer des alternatives, struct de changement, etc. Non, ajoutant NameFirst et NameLast champs n'est pas acceptable. Les 2 structures doivent rester intactes.

Répondre

0

Retirez le pointeur et il fonctionnera

Référence: http://jinzhu.me/gorm/associations.html

+0

désolé mais il n'a pas 'db.Where sql: convertir l'argument Exec de type 1 $: type non supporté main.Name, un struct' –