簡體   English   中英

在 GORM many2many join 中使用與默認值不同的連接表列

[英]Using Different Join Table Columns than Defaults with GORM many2many join

我正在使用 gorm 來管理我的結構到數據庫的映射。 現在,我有一個現有模式,我試圖將其包裝在 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

結果查詢 output

[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

任何幫助表示贊賞。

謝謝!

我想我可以推薦你參考這個答案 => gorm Many2Many Custom table如果你願意,可以將關系拆分為 3 個表或 3 個結構。 AuthUser、ReviewGroup 和組。 在您的授權用戶中,您執行與一對多關系相同的操作,對組也是如此。

例子:

  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 
}

希望能幫助到你!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM