如何使用gorm填充和嵌入阵列?
我有两个数据结构,如下所示:如何使用gorm填充和嵌入阵列?,go,go-gorm,Go,Go Gorm,我有两个数据结构,如下所示: type User struct { Pics Pic[] } type Pic struct { Id int UserId int64 } 虽然每次我插入用户时,每次我找到用户时,都会将每个图片插入到它们的表中,但不会填充图片: var users []User db.Limit(pagesize).Where("updated_at > ?", date).Find(&users) 我做错什么了吗?我曾经有过这些问题。然后
type User struct {
Pics Pic[]
}
type Pic struct {
Id int
UserId int64
}
虽然每次我插入用户时,每次我找到用户时,都会将每个图片插入到它们的表中,但不会填充图片:
var users []User
db.Limit(pagesize).Where("updated_at > ?", date).Find(&users)
我做错什么了吗?我曾经有过这些问题。然后我使用了连接函数。 请参见我的示例,该示例运行良好:
type FileType struct {
Id int
}
type File struct {
Id int
FileType `xorm:"extends"`
}
file := File{Id: id}
has, err := eng.
Join("INNER", "FileType", "FileType.IdFileType = File.IdFileType").
Get(&file)
我曾经有过这些问题。然后我使用了连接函数。 请参见我的示例,该示例运行良好:
type FileType struct {
Id int
}
type File struct {
Id int
FileType `xorm:"extends"`
}
file := File{Id: id}
has, err := eng.
Join("INNER", "FileType", "FileType.IdFileType = File.IdFileType").
Get(&file)
您的模型(结构)没有真正的意义,因为User
具有Pic
数组表示“一对多”用户与pics的关系,但是您的用户本身没有id属性,并且不能与Pic
表上的项相关联
用户应该有一个属性Id
,它将是用户的主键,UserId
是Pic上与其相关的外键。如果没有这两个表/实体之间的“关系”,就不可能通过查询用户来返回PIC
我不确定您需要做什么才能使代码正常工作,因为示例不完整,但您首先需要的是Id
属性,您应该将该属性指定为带有gorm注释的Primarykey。您还应该在Pic结构上有注释,说明UserId是外键,Id是主键
另外,仅供参考,您的阵列未嵌入。嵌入是一种不使用的语言功能,如果嵌入属性,则该属性没有名称,并且可以直接从嵌入类型的实例访问其属性。您的模型(结构)没有什么意义,因为User
具有Pic
数组表示“一对多”用户与pics的关系,但是您的用户本身没有id属性,因此不能与Pic
表中的项目相关联
用户应该有一个属性Id
,它将是用户的主键,UserId
是Pic上与其相关的外键。如果没有这两个表/实体之间的“关系”,就不可能通过查询用户来返回PIC
我不确定您需要做什么才能使代码正常工作,因为示例不完整,但您首先需要的是Id
属性,您应该将该属性指定为带有gorm注释的Primarykey。您还应该在Pic结构上有注释,说明UserId是外键,Id是主键
另外,仅供参考,您的阵列未嵌入。嵌入是一种不使用的语言功能,如果嵌入属性,则该属性没有名称,并且可以直接从嵌入类型的实例访问它的属性。您现在可能已经知道了。您必须像创建一个具有1对多关系的SQL表一样进行思考。以下是一个例子:
type Entry struct {
ID int
Name string
...
ContainerID int
}
type Container struct {
ID int
Tag int
Name string
...
Entries []Entry `gorm:"foreignkey:ContainerID"`
}
诀窍是填充它。我还没有找到一次成功的方法。对于每一个这样的依赖项,您都必须运行如下操作:
c := getContainerFromDB(...)
if err := getROConn().Model(c).Related(&c.Entries, "Entries").Error; err != nil {
return errors.Wrap(err, "error getting container field")
}
你现在可能知道了。您必须像创建一个具有1对多关系的SQL表一样进行思考。以下是一个例子:
type Entry struct {
ID int
Name string
...
ContainerID int
}
type Container struct {
ID int
Tag int
Name string
...
Entries []Entry `gorm:"foreignkey:ContainerID"`
}
诀窍是填充它。我还没有找到一次成功的方法。对于每一个这样的依赖项,您都必须运行如下操作:
c := getContainerFromDB(...)
if err := getROConn().Model(c).Related(&c.Entries, "Entries").Error; err != nil {
return errors.Wrap(err, "error getting container field")
}
试一试
试一试
我没有使用gorm的经验,但是您的查询是否返回pic数据?不,这就是问题所在,它不会在阵列上返回任何内容。我没有使用gorm的经验,但是您的查询是否返回pic数据?不,这就是问题所在,它不会在阵列上返回任何内容