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