我对 GORM 的映射有疑问。当我尝试访问组中的用户时,它为我创建了一个奇怪的查询。它不知道第三个表。但这是数据库的图像:
在解决问题之前,这是我的 2 模型:
type User struct {
ID uint `gorm:"primaryKey"`
Name string
// etc...
}
type Group struct {
ID uint `gorm:"primaryKey"`
IsPrivateMessage bool
Users []*User `gorm:"constraint:OnDelete:CASCADE;many2many:group_user"`
}
所以当我运行这个查询时:
err := database.DB.Model(models.Group{}).
Joins("Users").
Where("groups.id = ? and Users.id = ?", groupID, u.ID).
Limit(1).
Count(&count).Error
GORM 为我创建了这个 SQL:
SELECT count(*) FROM `groups` LEFT JOIN `users` `Users` ON `groups`.`id` = `Users`.`group_id` AND `groups`.`user_id` = `Users`.`id` WHERE groups.id = '1' and Users.id = 1 LIMIT
我什至尝试在加入用户之前添加此内容:
Joins("group_user")
,但它添加了 group_user 作为查询中组的别名。这个问题有什么解决办法吗?我真的什么也没发现。这就是现在的痛苦。
您能再描述一下您的问题吗?首先,您的 Groups ManyToMany 与用户的关联如何? 根据您的模型,我猜测一个组可以有多个用户。所以应该是一对多吧?