何处或何处的条款在laravel中不起作用

时间:2016-06-05 21:48:27

标签: php laravel

我很困惑这里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结果看起来都很奇怪,它显示了每个数据当前和过去的所有状态的所有数据。我是否必须将上述代码中的一个移到另一个方法上,还是有其他方法可以避免这种情况?这里到底发生了什么,请解释一下。

谢谢。

2 个答案:

答案 0 :(得分:2)

您似乎混淆了whereorWhere方法。第一个将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();

我希望这会对你有帮助..