为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕标5832272 2021-09-20 20:43:51
我有 2 个带有这样数据的结构:type User struct {  Pics Pic[]}type Pic struct {  Id int     UserId int64}尽管每次我插入用户时,每次找到用户时都会将每张图片插入他们的表中,但不会填充图片:var users []Userdb.Limit(pagesize).Where("updated_at > ?", date).Find(&users)难道我做错了什么?
查看完整描述

3 回答

?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

您的模型(结构)实际上没有意义,因为User有一个Pic数组表示“一对多”用户到图片的关系,但是您的用户本身没有 id 属性,因此不能与Pic表上的项目相关。

用户应该有一个属性Id,这将是它的主键,并且UserId是 Pic 上与之相关的外键。如果没有这两个表/实体之间的“关系”,您将无法通过查询用户来返回图片。

由于示例不完整,我不确定您需要做什么才能使代码正常工作,但您首先需要的是一个Id属性,您应该将其指定为带有 gorm 注释的 Primarykey。您还应该在 Pic 结构上添加注释,说明 UserId 是外键,而 Id 是主键。

另外,仅供参考,您的阵列未嵌入。嵌入是一种您没有使用的语言功能,如果您嵌入该属性,则它没有名称,并且可以直接从嵌入类型的实例访问它的属性。


查看完整回答
反对 回复 2021-09-20
?
翻阅古今

TA贡献1780条经验 获得超5个赞

我曾经遇到过这些问题。然后我使用了 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)


查看完整回答
反对 回复 2021-09-20
?
弑天下

TA贡献1818条经验 获得超8个赞

你现在可能知道了。您必须考虑创建一个具有 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")

}


查看完整回答
反对 回复 2021-09-20
  • 3 回答
  • 0 关注
  • 447 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信