Heim >Backend-Entwicklung >Golang >Implementierung von Beziehungen mit Wertearrays in Gorm
Das Implementieren von Beziehungen mit Wertefeldern ist eine sehr nützliche Funktion in Gorm. Gorm ist eine beliebte ORM-Bibliothek (Object Relational Mapping) der Go-Sprache, die es Entwicklern ermöglicht, die Go-Sprache zum Betrieb von Datenbanken zu verwenden. Im Gegensatz zu herkömmlichen relationalen Datenbanken ist ein Wertearray eine spezielle Datenstruktur, die es ermöglicht, mehrere Werte als Ganzes in einem Feld in der Datenbank zu speichern. Dies ist sehr hilfreich, um einige komplexe Datenstrukturen zu speichern oder die Abfrageeffizienz zu verbessern. In diesem Artikel zeige ich Ihnen, wie Sie Beziehungen mit Wertearrays in Gorm implementieren und diese zur Verbesserung der Entwicklungseffizienz nutzen.
Ich versuche, ein Modell für eine Rechnungsanwendung mit Go und Gorm zu implementieren. Ich habe eine Rechnungsstruktur definiert und möchte Rechnungsposten aus einer separaten Struktur einbinden.
type invoice struct { base companyid string `gorm:"not null"` company company invoiceno string `gorm:"not null"` currency string `gorm:"not null;default:'gbp'"` total float64 `gorm:"not null"` terms int `gorm:"not null;default:30"` issueddate time.time `gorm:"not null"` duedate time.time `gorm:"not null"` paid bool `gorm:"not null"` lineitems []lineitem `gorm:"foreignkey:invoiceid"` void bool `gorm:"default:false"` }
Das ist meine Einzelpostenstruktur.
type lineitem struct { base service string `gorm:"not null"` description string `gorm:"not null;"` amount float64 count int unitbase string `gorm:"not null;default:'days'"` // days or hours total float64 `gorm:"not null"` }
Wenn ich versuche, die App zu erstellen, erhalte ich die folgende Fehlermeldung.
... got error invalid field found for struct github.com/repo/API/database/models.Invoice's field LineItems: define a valid foreign key for relations or implement the Valuer/Scanner interface
Die Idee ist, dass ich eine limitierte Werbebuchung definieren kann, die aus einem festen Preis und einer festen Beschreibung wählen kann, um Duplikate zu vermeiden.
Ich bin mir nicht sicher, ob ich es richtig mache.
Meine Frage ist also: Ist es auf diese Weise möglich, eine Reihe von Elementen in ein relationales Modell einzubeziehen?
Basierend auf Ihren Spaltennamen fallen mir drei Möglichkeiten ein, dies zu erreichen:
Verwenden Sie die Standardsyntax (ohne gorm:foreignkey
)
type invoice struct { id //this is the primary key, may also be in your base model lineitems []lineitem ..other fields } type lineitem struct { id //primary key of lineitem invoiceid //automatically this will be your foreign key ..other fields }
Geben Sie einen benutzerdefinierten Fremdschlüssel an (vorausgesetzt, die zweite Struktur hat einen anderen Spaltennamen, den Sie als Fremdschlüssel verwenden möchten)
type invoice struct { id //this is the primary key, may also be in your base model lineitems []lineitem `gorm:"foreignkey:parentid"` ..other fields } type lineitem struct { id //primary key of lineitem parentid //this is the custom column referencing invoice.id ..other fields }
Oder die beiden Strukturen haben unterschiedliche Spaltennamen
type Invoice struct { ID //this is the primary key, may also be in your base model InvoiceNum Lineitems []LineItem `gorm:"foreignKey:ParentNum;references:InvoiceNum"` ..other fields } type LineItem struct { ID //primary key of LineItem ParentNum //this is now referencing Invoice.InvoiceNum ..other fields }
Das obige ist der detaillierte Inhalt vonImplementierung von Beziehungen mit Wertearrays in Gorm. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!