最近的项目一直在使用laravel框架,在使用过程中突然发现自带的助手函数where()与orWhere()使用起来和自己预想中的不一样,特此记录学习防止以后忘记.
举个例子我们需要查找状态为1,名称为张三 或者 简称为张三的用户
错误示例:
$users = DB::table('users')
->where('state', 1)
->orWhere('name', '张三')
->orWhere('shortName', '张三')
->get();
结果发现不符合自己的预期,经过查证特此改正.
正确示例:
方法一:
$users = DB::table('users')
->where('state',1)
->where(function($query) use($userName){
$query->where('name',$userName)
->orWhere(function($query) use($userName){
$query->where('shortName',$userName);
});
})
->get();
;
方法二:
$users = DB::table('users')
->where(function($query) use ($userName){
$query->where('state',1)->where('name',$userName);
})
->orWhere(function($query) use ($userName){
$query->where('state',1)->where('shortName',$userName);
})
->first();
;
以上两种方法经过测试都是可行的.希望对大家有用.