【发布时间】:2019-05-23 20:35:55
【问题描述】:
我有一个模型用户,它有很多订单。订单有很多产品,使用数据透视表 order-product。如果可能的话,我不想预加载和遍历订单。
我需要返回用户在哪里
- signed_date === 用户为真
- 订单的order_date 晚于用户的signed_date
- order-product 显示产品尚未付款
我在 2 号上失败了。 在下面的代码中, whereHas 中的第一个查询是错误的。我不知道如何从 where has 中引用用户的签名日期。如果我遍历集合中的用户,我可以执行类似 ($query) use $user 之类的操作,但是如何在不预加载所有用户的情况下执行此操作?
return User::whereNotNull('signed_date')
->whereHas('orders', function ($query) {
$query->where('order_date', '<=', 'user.signed_date');
$query->whereHas('products', function ($q) {
$q->where('paid', false);
});
})
->get(['id','fname','lname', 'title', 'signed_date']);
如果可能的话,我想使用 eloquent。如果这是不可能的,我会很高兴使用查询生成器/sql 解决这个问题的提示。
【问题讨论】:
-
whereHas不是子查询。这是一个单独的查询,因此您无法真正将它们组合起来 -
我不确定术语。如果不预加载所有用户,您将如何完成我的尝试?
-
@Namoshek 谢谢,它有效。请发表您之前的评论作为答案,我会接受。
标签: laravel eloquent laravel-query-builder