Php laravel或当值为false时给出意外结果的位置

Php laravel或当值为false时给出意外结果的位置,php,laravel,Php,Laravel,我写了一个问题 Order::where(function ($query) use ($request) { $query->where('email', $request->email_or_mobile) ->orWhere('mobile_no', $request->email_or_mobile); }) ->where('transaction_no', $request->reference_

我写了一个问题

Order::where(function ($query) use ($request) {
      $query->where('email', $request->email_or_mobile)
            ->orWhere('mobile_no', $request->email_or_mobile);
    })
    ->where('transaction_no', $request->reference_no)
    ->count();
$request->email\u或\u mobile
不是
false
时,此查询正常。但是当
false
时,它会跳过

where(function ($query) use ($request) {
      $query->where('email', $request->email_or_mobile)
            ->orWhere('mobile_no', $request->email_or_mobile);
    })
并给出
->其中('transaction\u no',$request->reference\u no)
条件的结果。为什么我会有这样的行为

Order::where('email', $request->email_or_mobile)
    ->orWhere(function($query) use ($request) {
            ->Where('mobile_no', $request->email_or_mobile);
    })
    ->where('transaction_no', $request->reference_no)
    ->count();

试试这个。

当您的
$request->email\u或\u mobile
为false时,您的sql中将有一个条件
false==false
,结果为true,因此您的sql如下
SELECT*FROM order WHERE(false=false)和transaction\u no=?
,这意味着订单将仅按transaction\u no进行过滤。

为什么OP要尝试此操作?好的答案总是有一个解释,说明做了什么以及为什么这样做,不仅是为了OP,而且是为了未来的访客,以便他们可以找到这个问题并阅读你的答案。如果答案很好,他们可能会投赞成票。你期望的结果或疑问是什么