laravel给出了whereIn的用法:
$users = DB::table('users')
->whereIn('id', [1, 2, 3])
->get();
或者在闭包中使用whereIn:
$ids = [1,2];
$list = User::where(function($query) use ($ids){
$query->whereIn('id', $ids);
})
->get();
因为我们项目是封装了laravel框架,所以where条件必须做成数组形式更规范一些,下面这个方式完美解决了我们的问题;
需要将使用 in 查询的字段写成闭包的形式:
$where['status'] = 1;
$ids = [1,2];
$where[] = [function($query) use ($ids){
$query->whereIn('id', $ids);
}];
$list = User::where($where)
->get();
生成 sql 如下:
select * from `users` where (`status` = 1 and (`id` in (1, 2)))
那么同理:or 的用法与其类似,虽然官方提供了orWhere方法,我们为了更方便的使用数组条件查询,可以写成:
$where[] = [function ($query) use($keyword){
return $query->where('name','like','%'.$keyword.'%')->orWhere('erp_code','like','%'.$keyword.'%');
}];
这样的方式会将闭包里的查询合为一个独立查询条件,不会和外部的查询条件混合在一起
最近加上子查询的写法,供使用:
->whereIn('player_id',function ($query) use($doingId){
$query->select('player_id')
->from('big_doll_player')
->where('doing_id', $doingId);
})
很感谢文章原作者,参考资料:Laravel 条件数组 in 的用法 | Laravel China 社区