laravel或在值为false时给出意外结果的地方

时间:2019-04-04 11:54:55

标签: 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_no)
    ->count();

$request->email_or_mobile不是false时,此查询可以。但是当false跳过

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)条件的结果。为什么会出现这种有线行为?

2 个答案:

答案 0 :(得分:0)

当您的$request->email_or_mobile为假时,您的sql中将有一个条件false == false,结果为true,因此您的sql将像这样 SELECT * FROM order WHERE (false = false) and transaction_no=?,这意味着订单将仅由transaction_no过滤。

答案 1 :(得分:-1)

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();

尝试一下。