我写了一个查询
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)
条件的结果。为什么会出现这种有线行为?
答案 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();
尝试一下。