我试图使用GORM从父表中仅选择在相关表中具有匹配条件的项目。
type Table1 struct {
gorm.Model
Name string
Email string
Items Table2
}
type Table2 struct {
gorm.Model
Product string
otherfield string
}
我想返回将Table2中的Product设置为特定值的所有Table1项。到目前为止,我正在获取mssql:不能绑定多部分标识符“ visits.sign_out_time”。很多。
我的命令是
var items []Table2
db.Debug().Preload("Table2").Where("table2.product = ?", "xxx").Find(&items).GetErrors()
不能完全确定我哪里出错了,但是由于任何原因.Where()无法访问第二个预加载的表。我该如何使用GORM实现我想要做的事情?
谢谢亚历克斯
将Where("table2.product = ?", "xxx")
因为无法访问第二(预装)表Preload
不是JOINS
,它是一个单独SELECT
的查询。您的代码创建两个单独的查询,如下所示:
// first query
SELECT * FROM table1 WHERE table2.product = 'xxx';
// second query
SELECT * FROM table2;
为了回报所有Table1
有记录Product
的Table2
设置为特定的值,你必须做到以下几点:
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
请注意,该AND table1.id = t2.table1_id
部分只是两个表如何关联的示例,您可能具有不同的关联,您将需要相应地修改查询。
如果您希望GORM t1.Items
用Table2
数据填充,则可以Preload("Items")
进行上述查询。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句