【发布时间】:2019-12-20 05:04:52
【问题描述】:
我正在尝试在我的模型的嵌套关系上添加 where 条件,如下所示:
SELECT *
FROM users u
INNER JOIN products p ON p.user_id = u.id
WHERE p.created_at > '2019-12-01';
我在 laravel 做的是:
$this->builder->where('products.date', '>', '2019-12-01');
而且它显然运行良好。问题是,如果我将其替换为:
$this->builder->whereHas('products', function ($query) {
$query->where('date', '>', '2019-12-01');
});
它不再像预期的那样工作了。那是因为在第二种情况下,laravel 增加了如下查询:
and exists (SELECT * from products where users.id = products.user_id and date > '2019-12-01')
所以在这种情况下,我的JOIN 不适用于我的 where 条件,我得到的结果太多。
有没有办法应用嵌套的where 条件,使用雄辩的关系,就像我的第一个例子一样?
【问题讨论】:
-
根据这篇文章,原始查询将是
and exists (SELECT * from products where users.id = products.user_id and date > '2019-12-01'),我想你忘了贴一些代码。 -
joinproducts在$this->builder->whereHas之前也是如此吗?你能把你的代码贴在$this->builder
标签: php mysql sql laravel eloquent