Maison > développement back-end > Golang > le corps du texte

Implémentation de relations avec des tableaux de valeurs dans Gorm

WBOY
Libérer: 2024-02-09 08:48:09
avant
670 Les gens l'ont consulté

在 Gorm 中实现与值数组的关系

Implémenter des relations avec des tableaux de valeurs est une fonctionnalité très utile dans Gorm. Gorm est une bibliothèque ORM (Object Relational Mapping) populaire du langage Go qui permet aux développeurs d'utiliser le langage Go pour faire fonctionner des bases de données. Contrairement aux bases de données relationnelles traditionnelles, un tableau de valeurs est une structure de données spéciale qui permet de stocker plusieurs valeurs dans leur ensemble dans un champ de la base de données. Ceci est très utile pour stocker certaines structures de données complexes ou améliorer l'efficacité des requêtes. Dans cet article, je vais vous présenter comment implémenter des relations avec des tableaux de valeurs dans Gorm et comment les utiliser pour améliorer l'efficacité du développement.

Contenu de la question

J'essaie d'implémenter un modèle pour une application de facturation utilisant Go et Gorm. J'ai défini une structure de facture et je souhaite inclure des éléments de ligne de facture provenant d'une structure distincte.

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"`
}
Copier après la connexion

Voici ma structure d'éléments de ligne.

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"`
}
Copier après la connexion

Lorsque j'essaie de créer l'application, j'obtiens l'erreur suivante.

... 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
Copier après la connexion

L'idée est que je peux définir un élément de campagne limité qui peut choisir parmi un tarif fixe et une description pour limiter la duplication.

Je ne suis pas sûr de m'y prendre de la bonne manière.

Ma question est donc la suivante : est-il possible d'inclure un tableau d'éléments dans un modèle relationnel de cette façon ?

Solution de contournement

En fonction des noms de vos colonnes, je peux penser à trois façons d'y parvenir :

  1. Utiliser la syntaxe par défaut (sans 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
     }
    Copier après la connexion
  2. Spécifiez une clé étrangère personnalisée (en supposant que la deuxième structure ait un nom de colonne différent que vous souhaitez utiliser comme clé étrangère)

    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
     }
    Copier après la connexion
  3. Ou les deux structures ont des noms de colonnes différents

    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
     }
    Copier après la connexion

    Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!