最近的项目一直在使用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();
;
以上两种方法经过测试都是可行的.希望对大家有用.
在 Laravel 开发中遇到 where 和 orWhere 助理函数使用不当的问题,导致查询结果不符合预期。错误示例是直接连续使用 orWhere,但实际应通过嵌套 where 子句来实现需求。文中提供了两种正确方法:一是使用匿名函数将 orWhere 子句包含在内;二是分别对每个条件进行 where 子句的组合。经过测试,这两种方法均可行。
3242

被折叠的 条评论
为什么被折叠?



