Laravel 使用数组条件查询时 in和or 的用法

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 社区

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值