我很困惑这里clsuses,我有这个代码,我称之为过去的订单。它现在工作正常。
$orders = Order::where('user_id', '=', Auth::user()->id)
->orWhere(function ($query2) {
$query2->where('status', '=', 2)
->where('status', '=', 3);
})
->orderBy('created_at', 'DESC')
->get();
然后我在该代码下面有一个foreach。然后我有另一个变量:
$orders_current = Order::where('user_id', '=', Auth::user()->id)
->orWhere(function ($query) {
$query->where('status', '=', 0)
->where('status', '=', 1);
})
->orderBy('created_at', 'DESC')
->get();
从现在起,所有foreach结果看起来都很奇怪,它显示了每个数据当前和过去的所有状态的所有数据。我是否必须将上述代码中的一个移到另一个方法上,还是有其他方法可以避免这种情况?这里到底发生了什么,请解释一下。
谢谢。答案 0 :(得分:2)
您似乎混淆了where
和orWhere
方法。第一个将AND
子句添加到WHERE
语句,而第二个子句添加OR
子句。
这意味着生成的查询是:
SELECT *
FROM orders
WHERE user_id = ?
OR (status = 0 AND status = 1)
ORDER BY created_at DESC
OR
的第二部分永远不会成立,您可能只是看到两个查询中的所有用户订单。
您始终可以使用getQueryLog方法查看SQL查询的形成方式。
答案 1 :(得分:1)
$orders_current = Order::where('user_id', '=', Auth::user()->id)
->where(function ($query) {
$query->where('status', '=', 0)
->OrWhere('status', '=', 1);
})
->orderBy('created_at', 'DESC')
->get();
我希望这会对你有帮助..