2 回答

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超5個(gè)贊
Where("table2.product = ?", "xxx")無(wú)法訪問第二個(gè)(預(yù)加載)表,因?yàn)樗黀reload不是一個(gè)JOINS,它是一個(gè)單獨(dú)的SELECT查詢。您的代碼創(chuàng)建兩個(gè)單獨(dú)的查詢,如下所示:
// first query
SELECT * FROM table1 WHERE table2.product = 'xxx';
// second query
SELECT * FROM table2;
為了返回設(shè)置為特定值的所有記錄,您必須執(zhí)行以下操作Table1:ProductTable2
var t1 []Table1
err = db.
Where(`EXISTS(SELECT 1 FROM table2 t2 WHERE t2.product = ? AND table1.id = t2.table1_id)`, productValue).
Find(&t1).Error
請(qǐng)注意,這AND table1.id = t2.table1_id部分只是兩個(gè)表如何相關(guān)的示例,您可能有不同的關(guān)系,您需要相應(yīng)地修改查詢。
如果您希望 GORMt1.Items使用Table2數(shù)據(jù)填充 ,請(qǐng)Preload("Items")在上述查詢之前添加。

TA貢獻(xiàn)1878條經(jīng)驗(yàn) 獲得超4個(gè)贊
如果只需要Items,可以直接查詢,Table2無(wú)需預(yù)加載Table1
var items []Table2
db.Where("product = ?", "xxx").Find(&items).GetErrors()
或者您需要Table1then Join 的所有數(shù)據(jù),table2然后使用 where 子句
db.Debug().Joins("JOIN table2 ON table1.id = table2.table1_id")
.Where("table2.product = ?", "xxxx").Find(&table1data)
在這里我沒有看到任何外鍵Table2加入。你可以添加一個(gè)。
type Table2 struct {
gorm.Model
Product string
Table1ID uint
}
- 2 回答
- 0 關(guān)注
- 610 瀏覽
添加回答
舉報(bào)