首页 >后端开发 >Golang >在 Gorm 中实现与值数组的关系

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

WBOY
WBOY转载
2024-02-09 08:48:09708浏览

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

在 Gorm 中,实现与值数组的关系是一项非常有用的功能。Gorm 是一个流行的 Go 语言 ORM(对象关系映射)库,它允许开发者使用 Go 语言来操作数据库。与传统的关系型数据库不同,值数组是一种特殊的数据结构,它允许将多个值作为一个整体存储在数据库中的某个字段中。这对于存储一些复杂的数据结构或者提高查询效率都非常有帮助。在本文中,我将向大家介绍如何在 Gorm 中实现与值数组的关系,以及如何使用它来提升开发效率。

问题内容

我正在尝试使用 go 和 gorm 实现发票应用程序的模型。我已经定义了发票结构,并希望包含来自单独结构的发票行项目。

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"`
}

这是我的 lineitem 结构。

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"`
}

当我尝试构建应用程序时,出现以下错误。

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

我的想法是,我可以定义一个有限的设置订单项,可以从固定费率和说明中进行选择,以限制重复。

我不确定我的处理方式是否正确。

所以我的问题是,是否可以通过这种方式包含关系模型中的项目数组?

解决方法

根据您的列名称,我可以想到三种方法来实现此目的:

  1. 使用默认语法(无 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. 指定自定义外键(假设第二个结构具有不同的列名称,您希望将其作为外键)

    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. 或者两个结构体具有不同的列名称

    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
     }

以上是在 Gorm 中实现与值数组的关系的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文转载于:stackoverflow.com。如有侵权,请联系admin@php.cn删除