2016-11-21 7 views
1

Ich benutze Golang und GORM. Ich habe eine User Struktur, die eine Association hat.Gorm - Hat eine Beziehung mit anonymem Feld

type User struct { 
    ID  int 
    ... 
} 

type Association struct { 
    ID  int 
    UserID int 
} 

Ich habe auch eine AssoUser Struktur, die aus einem anonymen Feld besteht User, und hat einen Zeiger auf Assocation.

type AssoUser struct { 
    User 
    Asso *Association 
} 

Als ich

var assoUser AssoUser 
assoUser.Asso = &Association{ 
    Name : "asso_name", 
    ... 
} 
assoUser.Name = "user_name" 
... 

// filling the struct 
db.Debug().Create(&assoUser) 

laufen erwarte ich, dass es die User und die Association zu schaffen, aber es schafft nur den Benutzer.

Was mache ich falsch?

+0

können Sie Code für ... anzeigen, der die Struktur füllt ...? – pregmatch

+0

Ich habe den Code – GuillaumeP

+0

bearbeitet Ich fülle alle Struktur außer IDs, sollte es von gorm gefüllt werden – GuillaumeP

Antwort

0

Ich hatte ein ähnliches Problem, aber ich entdeckte, dass es ein Problem mit anonymen Typen war.

Wenn Sie

type Thing struct { 
    Identifier string 
    ext 
} 

type ext struct { 
    ExtValue string 
} 

gorm haben nicht in der Lage sein ext zu finden, so dass es nicht in der Tabelle angezeigt werden.

Wenn Sie jedoch

type Thing struct { 
    Identifier string 
    Ext 
} 

type Ext struct { 
    ExtValue string 
} 

ExtValue erscheint in der Tabelle als normale Zeichenfolge haben, als ob es ein Teil des Thing Objekt waren.

Wenn Sie eine Has-One-Beziehung erstellen möchten, müssen Sie eine ID in Ihre Struktur einfügen. So würde das obige Beispiel wie folgt aussehen:

type Thing struct { 
    Identifier string 
    Ext 
} 

type Ext struct { 
    ThingId uint 
    ExtValue string 
} 
Verwandte Themen