
在 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
我的想法是,我可以定义一个有限的设置订单项,可以从固定费率和说明中进行选择,以限制重复。
我不确定我的处理方式是否正确。
所以我的问题是,是否可以通过这种方式包含关系模型中的项目数组?
根据您的列名称,我可以想到三种方法来实现此目的:
使用默认语法(无 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
}指定自定义外键(假设第二个结构具有不同的列名称,您希望将其作为外键)
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
}或者两个结构体具有不同的列名称
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中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号