通过Postgres pq
驱动程序使用Go 1.10和CockroachDB .
我有一个看起来像这样的GORM模型:
type User struct {
ID string `gorm:"type:UUID;primary_key;NOT_NULL"`
UserName string
... <other misc things here>
EnclosedUsers []User `gorm:"many2many:enclosed_user;jointable_foreignkey:parent_id;association_jointable_foreignkey:child_id"`
}
ecnlosed_user
在哪里(具体定义因为原因:))
type EnclosedUsers struct {
ParentID string `gorm:"type:UUID;default:'00000000-0000-0000-0000-000000000000'"`
ChildID string `gorm:"type:UUID;default:'00000000-0000-0000-0000-000000000000'"`
}
也就是说,每个用户可以拥有0个或多个封闭用户,并且每个用户可以拥有许多父用户 . 我试图为每个用户的所有封闭用户 preload
,但GORM只预加载第一级 .
即:
usr1
|-> usr 2
| |->usr3
|
|-> usr4
|->usr6
usr5
|->usr7
加载的唯一用户是usr1,usr2,usr4,usr5和usr7 . usr3或usr 6不是 . 我目前正试图递归强制封闭的用户加载 AfterFind
回调:
func (u *User) AfterFind(scope *gorm.Scope, role *CRRole) error {
var childUsers []User
if err := scope.DB().Model(&u).Related(&childUsers, "EnclosedUsers").Error; err != nil {
return err
}
role.EnclosedRoles = childRoles
return nil
}
但是,这会生成以下SQL:
SELECT "users".* FROM "users" INNER JOIN "enclosed_users" ON "enclosed_users"."child_id" = "enclosed_users"."id" WHERE (user_name = 'test user 1') AND ("enclosed_users"."parent_id" IN ('<UUID HERE>'))
如果 user_name = ...
不在那里,查询将完美地工作 .
任何想法将不胜感激 .
1 回答
我最终要求存储库并在line 331删除
callback_query_preload.go
. 奇迹般有效 .