[英]Using Different Join Table Columns than Defaults with GORM many2many join
I'm using gorm to manage my struct to database mappings.我正在使用 gorm 来管理我的结构到数据库的映射。 Right now, I have an existing schema that I'm trying to wrap in an api. The issue is that in one of my structs, I have a
many2many
join through another table which doesn't use the default column names.现在,我有一个现有模式,我试图将其包装在 api 中。问题是,在我的一个结构中,我通过另一个不使用默认列名的表进行了
many2many
连接。
type AuthUser struct {
ID *int
Username *string `sql:"size:30"`
FirstName *string `sql:"size:30"`
LastName *string `sql:"size:30"`
Email *string `sql:"size:75"`
IsActive *bool
IsStaff *bool
IsSuperuser *bool
DateJoined *time.Time
LastLogin *time.Time
//ReviewsGroups ReviewsGroups `gorm:"foreignkey:group_id;associationforeignkey:user_id;many2many:reviews_group_users"`
//ReviewsGroups ReviewsGroups `gorm:"many2many:reviews_group_users"`
ReviewsGroups []ReviewsGroup `gorm:"many2many:reviews_group_users"`
}
type ReviewsGroups []ReviewsGroup
func (app *AppEnv) FindAuthUser(username string) (*AuthUser, error) {
var user AuthUser
//var groups []ReviewsGroup
//err := app.DB.Where(&AuthUser{Username: &username}).First(&user).Related(&groups).Error
err := app.DB.Preload("ReviewsGroups").Where(&AuthUser{Username: &username}).First(&user).Error
return &user, err
}
rb=> \d reviews_group_users
Table "public.reviews_group_users"
Column | Type | Modifiers
----------+---------+------------------------------------------------------------------
id | integer | not null default nextval('reviews_group_users_id_seq'::regclass)
group_id | integer | not null
user_id | integer | not null
Indexes:
"reviews_group_users_pkey" PRIMARY KEY, btree (id)
"reviews_group_users_group_id_user_id_key" UNIQUE CONSTRAINT, btree (group_id, user_id)
"reviews_group_users_group_id" btree (group_id)
"reviews_group_users_user_id" btree (user_id)
Foreign-key constraints:
"group_id_refs_id_0f32ed01" FOREIGN KEY (group_id) REFERENCES reviews_group(id) DEFERRABLE INITIALLY DEFERRED
"reviews_group_users_user_id_fkey" FOREIGN KEY (user_id) REFERENCES auth_user(id) DEFERRABLE INITIALLY DEFERRED
[2015-10-30 09:31:32] [1.16ms] SELECT * FROM "auth_user" WHERE ("username" = 'theuser') ORDER BY "auth_user"."id" ASC LIMIT 1
[2015-10-30 09:31:32] [1.85ms] SELECT * FROM "reviews_group" INNER JOIN reviews_group_users ON reviews_group_users."reviews_group_id" = "reviews_group"."id" WHERE (auth_user_id in ('13'))
[2015-10-30 09:31:32] pq: column reviews_group_users.reviews_group_id does not exist
Any help is appreciated.任何帮助表示赞赏。
Thanks!谢谢!
I think I can refer you to this answer => gorm Many2Many Custom table Split the relationship into 3 tables or 3 structs if you like.我想我可以推荐你参考这个答案 => gorm Many2Many Custom table如果你愿意,可以将关系拆分为 3 个表或 3 个结构。 AuthUser, ReviewGroup, and Group.
AuthUser、ReviewGroup 和组。 In your auth user you do the same as you would do with a one-to-many relationship and the same for group.
在您的授权用户中,您执行与一对多关系相同的操作,对组也是如此。
example:例子:
type AuthUser struct {
ID *int
Username *string `sql:"size:30"`
FirstName *string `sql:"size:30"`
LastName *string `sql:"size:30"`
Email *string `sql:"size:75"`
IsActive *bool
IsStaff *bool
IsSuperuser *bool
DateJoined *time.Time
LastLogin *time.Time
ReviewsGroups []ReviewsGroup `gorm:"foreignKey:User_id;references:ID;"`
}
type Group struct {
ID uint `gorm:"primaryKey"`
param string
ReviewsGroups []ReviewsGroup
}
type ReviewGroup struct {
User_id uint `gorm:"primaryKey"`
User AuthUser `gorm:"foreignKey:ID;references:User_id"` // not necessary unless you want to be able to navigate via this model
Group_id uint `gorm:"primaryKey"`
Group AuthUser `gorm:"foreignKey:ID;references:Group_id"` // not necessary unless you want to be able to navigate via this model
param string
}
Hope it helps!希望能帮助到你!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.