猿问

如何使用gorm填充和嵌入数组?

我有 2 个带有这样数据的结构:


type User struct {

  Pics Pic[]

}


type Pic struct {

  Id int   

  UserId int64

}

尽管每次我插入用户时,每次找到用户时都会将每张图片插入他们的表中,但不会填充图片:


var users []User

db.Limit(pagesize).Where("updated_at > ?", date).Find(&users)

难道我做错了什么?


慕标5832272
浏览 448回答 3
3回答

侃侃尔雅

您的模型(结构)实际上没有意义,因为User有一个Pic数组表示“一对多”用户到图片的关系,但是您的用户本身没有 id 属性,因此不能与Pic表上的项目相关。用户应该有一个属性Id,这将是它的主键,并且UserId是 Pic 上与之相关的外键。如果没有这两个表/实体之间的“关系”,您将无法通过查询用户来返回图片。由于示例不完整,我不确定您需要做什么才能使代码正常工作,但您首先需要的是一个Id属性,您应该将其指定为带有 gorm 注释的 Primarykey。您还应该在 Pic 结构上添加注释,说明 UserId 是外键,而 Id 是主键。另外,仅供参考,您的阵列未嵌入。嵌入是一种您没有使用的语言功能,如果您嵌入该属性,则它没有名称,并且可以直接从嵌入类型的实例访问它的属性。

翻阅古今

我曾经遇到过这些问题。然后我使用了 Join 功能。请参阅我的示例,该示例工作正常: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)

弑天下

你现在可能知道了。您必须考虑创建一个具有 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")}
随时随地看视频慕课网APP

相关分类

Go
我要回答