第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

GORM 預(yù)加載:如何使用自定義表名

GORM 預(yù)加載:如何使用自定義表名

Go
森欄 2022-08-15 17:31:26
我有一個(gè)帶有預(yù)加載的GORM查詢,它工作得很好,因?yàn)槲覍⑵浣壎ǖ揭粋€(gè)名為“companies”的結(jié)構(gòu),這也是相應(yīng)數(shù)據(jù)庫表的名稱:var companies []Companydb.Preload("Subsidiaries").Joins("LEFT JOIN company_prod ON company_products.company_id = companies.id").Where("company_products.product_id = ?", ID).Find(&companies)現(xiàn)在我想做類似的事情,但將結(jié)果綁定到一個(gè)沒有引用“companies”表的名稱的結(jié)構(gòu):var companiesFull []CompanyFulldb.Preload("Subsidiaries").Joins("LEFT JOIN company_prod ON company_products.company_id = companies.id").Where("company_products.product_id = ?", ID).Find(&companies)為了更好地理解,我簡(jiǎn)化了第二個(gè)調(diào)用,真正的調(diào)用有更多的JOIN并返回更多的數(shù)據(jù),因此它不能綁定到“公司”結(jié)構(gòu)。但是我收到一個(gè)錯(cuò)誤:column company_subsidiaries.company_full_id does not exist相應(yīng)的 SQL 查詢:SELECT * FROM "company_subsidiaries" WHERE "company_subsidiaries"."company_full_id" IN (2,1)沒有“company_subsidiaries.company_full_id”,正確的查詢應(yīng)該是:SELECT * FROM "company_subsidiaries" WHERE "company_subsidiaries"."company_id" IN (2,1)該條件顯然是從結(jié)果綁定到的結(jié)構(gòu)的名稱生成的。有沒有辦法為此情況指定自定義名稱?我知道Tabler接口技術(shù),但是它不適用于預(yù)加載,我相信(嘗試過,它更改了主查詢的表名,但不會(huì)更改預(yù)加載)。
查看完整描述

1 回答

?
猛跑小豬

TA貢獻(xiàn)1858條經(jīng)驗(yàn) 獲得超8個(gè)贊

在這種情況下,似乎要走的路可能是自定義公司中的關(guān)系Full模型。使用 joinForeignKey,以下代碼有效。


type CompanyFull struct {

    Products     []*Product    `json:"products" gorm:"many2many:company_products;joinForeignKey:ID"`

    Subsidiaries []*Subsidiary `json:"subsidiaries" gorm:"many2many:company_subsidiaries;joinForeignKey:ID"`

    ID           int           `json:"ID,omitempty"`

}


func (CompanyFull) TableName() string {

    return "companies"

}


func main(){

...

  result := db.Preload("Subsidiaries").Joins("LEFT JOIN company_products ON company_products.company_id = companies.id").Where("company_products.product_id = ?", ID).Find(&companies)

  if result.Error != nil {

    log.Println(result.Error)

  } else {

    log.Printf("%#v", companies)

  }

有關(guān)自定義關(guān)系中使用的外鍵的詳細(xì)信息,請(qǐng)查看文檔 https://gorm.io/docs/many_to_many.html#Override-Foreign-Key


查看完整回答
反對(duì) 回復(fù) 2022-08-15
  • 1 回答
  • 0 關(guān)注
  • 280 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)