laravel多字段模糊查找,用when+orwhere时其他条件失效
Posted 酸辣柠檬粉
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);
以上是关于laravel多字段模糊查找,用when+orwhere时其他条件失效的主要内容,如果未能解决你的问题,请参考以下文章
laravel多字段模糊查找,用when+orwhere时其他条件失效