我写了一个查询
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)条件的结果。为什么我会有这种连线行为?
发布于 2019-04-04 20:15:05
当您的$request->email_or_mobile为false时,您的sql中将有一个条件false == false,结果为true,因此您的sql将是这样的SELECT * FROM order WHERE (false = false) and transaction_no=?,这意味着订单将只按transaction_no进行过滤。
发布于 2019-04-04 20:05:25
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();尝尝这个。
https://stackoverflow.com/questions/55515405
复制相似问题