转到GORM预加载并仅选择与预加载表条件匹配的项目

LordBoBCUP:

我试图使用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有记录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

请注意,该AND table1.id = t2.table1_id部分只是两个表如何关联的示例,您可能具有不同的关联,您将需要相应地修改查询。

如果您希望GORM t1.ItemsTable2数据填充,则可以Preload("Items")进行上述查询。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章