laravel多字段模糊查找,用when+orwhere时其他条件失效

多字段查询时 ,关键字模糊查找$keywords,使用when条件+orwhere时,其他where条件失效

 使用出来的sql语句为

 select count(*) as aggregate from `gwgl_buyers` where (exists (select * from `gwgl_users` where `gwgl_buyers`.`user_id` = `gwgl_users`.`id` and `nickname` like %4000% and `gwgl_users`.`deleted_at` is null) and `identity` = 1 and `nickname` like %100% or `account` like %100% or `tel` like %100% or `QQ` like %100% or `wechat` like %100%) and `gwgl_buyers`.`deleted_at` is null)

 

很明显 like语句 需要阔起来作为and的其中一个条件

select count(*) as aggregate from `gwgl_buyers` where `identity` = 1 and (`nickname` like %100% or `account` like %100% or `tel` like %100% or `QQ` like %100% or `wechat` like %100%) and exists (select * from `gwgl_users` where `gwgl_buyers`.`user_id` = `gwgl_users`.`id` and `nickname` like %4000% and `gwgl_users`.`deleted_at` is null) and `gwgl_buyers`.`deleted_at` is null)

修改when语句为where语句就ok了

$list = Buyer::with(['tag','origin','user'=>function($query){
                $query->select('id','nickname');
            }])
            ->when($tag,function($query,$tag){
                return $query->where('tag_id',$tag);
            })
            ->when($origin,function($query,$origin){
                return $query->where('origin_id',$origin);
            })
            ->where('identity',1)
            ->where(function($query) use($keywords){
                $query->where('nickname','like','%'.$keywords.'%');
                $query->orWhere('account','like','%'.$keywords.'%');
                $query->orWhere('tel','like','%'.$keywords.'%');
                $query->orWhere('QQ','like','%'.$keywords.'%');
                $query->orWhere('wechat','like','%'.$keywords.'%') ;
            })
            ->whereHas('user',function(Builder $query) use($manager){
                $manager && $query->where('nickname','like','%'.$manager.'%');
            })
            ->paginate($limit);

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值