Heim  >  Artikel  >  Backend-Entwicklung  >  Implementierung von Beziehungen mit Wertearrays in Gorm

Implementierung von Beziehungen mit Wertearrays in Gorm

WBOY
WBOYnach vorne
2024-02-09 08:48:09626Durchsuche

在 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.

Frageninhalt

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?

Workaround

Basierend auf Ihren Spaltennamen fallen mir drei Möglichkeiten ein, dies zu erreichen:

  1. 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
     }
  2. 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
     }
  3. 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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen
Vorheriger Artikel:.gif in Go rendernNächster Artikel:.gif in Go rendern