如何从 gorm 中的 many2many table 获取对象
How to get object from many2many table in gorm
我在 Followers 的用户结构中自引用了 many2many table。其中 user_id 和 follower_id 是外键。
type User struct {
ID uint `gorm:"primary_key"`
Name string `gorm:"size:20"`
LastName string `gorm:"size:40"`
Follow []User `gorm:"many2many:Follow;association_jointable_foreignkey:follower_id"`
}
还有 FollowUser 函数可以从身份验证令牌获取用户 ID 并从 request.And 获取其他用户 ID 它需要检查用户是否尚未关注所选用户。我怎么能帮凶呢?
这是我试过的方法。
var CheckUser User
db.Preload("Follow", "user_id = ? AND follower_id = ?", selectedUser.ID, user.ID).Find(&CheckUser)
if CheckUser.ID != 0 {
w.WriteHeader(http.StatusAlreadyReported)
JSONResponse(struct{}{}, w)
return
}
//Add user to followings
db.Model(&selectedUser).Association("Follow").Append(&user)
db.Model(&selectedUser).Updates(User{Followers: selectedUser.Followers + 1})
db.Model(&user).Updates(User{Following: user.Following + 1})
w.WriteHeader(http.StatusOK)
在此预加载语句之后,我收到了 table 中的所有对象。 user_id = ?和 follower_id =?不起作用。
P.S。我使用 mariaDB
也许不是最好的解决方案,但这对我有帮助:
db.Raw("select * from users where id = (Select user_id from Follow where follower_id = ? and user_id = ? LIMIT 1) LIMIT 1", usrID, selectedUser.ID).Scan(&CheckUser)
我在 Followers 的用户结构中自引用了 many2many table。其中 user_id 和 follower_id 是外键。
type User struct {
ID uint `gorm:"primary_key"`
Name string `gorm:"size:20"`
LastName string `gorm:"size:40"`
Follow []User `gorm:"many2many:Follow;association_jointable_foreignkey:follower_id"`
}
还有 FollowUser 函数可以从身份验证令牌获取用户 ID 并从 request.And 获取其他用户 ID 它需要检查用户是否尚未关注所选用户。我怎么能帮凶呢? 这是我试过的方法。
var CheckUser User
db.Preload("Follow", "user_id = ? AND follower_id = ?", selectedUser.ID, user.ID).Find(&CheckUser)
if CheckUser.ID != 0 {
w.WriteHeader(http.StatusAlreadyReported)
JSONResponse(struct{}{}, w)
return
}
//Add user to followings
db.Model(&selectedUser).Association("Follow").Append(&user)
db.Model(&selectedUser).Updates(User{Followers: selectedUser.Followers + 1})
db.Model(&user).Updates(User{Following: user.Following + 1})
w.WriteHeader(http.StatusOK)
在此预加载语句之后,我收到了 table 中的所有对象。 user_id = ?和 follower_id =?不起作用。 P.S。我使用 mariaDB
也许不是最好的解决方案,但这对我有帮助:
db.Raw("select * from users where id = (Select user_id from Follow where follower_id = ? and user_id = ? LIMIT 1) LIMIT 1", usrID, selectedUser.ID).Scan(&CheckUser)