如何在Laravel中使用多Where条件实现特定数据查询
Laravel多条件筛选查询方案
针对你需求的同一列多条件(Position为All或用户职位、Gender为All或用户性别)筛选,可通过Laravel查询构造器的分组where条件实现,确保两个条件组同时满足。
基础准备
假设对应的数据表模型为 Item,当前登录用户的职位和性别可通过认证系统获取:
$userPosition = auth()->user()->position; $userGender = auth()->user()->gender;
查询语句实现
$items = Item::query() ->where(function ($query) use ($userPosition) { // 筛选Position为All或用户职位 $query->where('Position', 'All') ->orWhere('Position', $userPosition); }) ->where(function ($query) use ($userGender) { // 筛选Gender为All或用户性别 $query->where('Gender', 'All') ->orWhere('Gender', $userGender); }) ->get();
逻辑说明
- 第一个闭包分组处理
Position的筛选:只要Position是All或者等于用户职位,就符合条件 - 第二个闭包分组处理
Gender的筛选:只要Gender是All或者等于用户性别,就符合条件 - 两个分组通过
where连接,意味着必须同时满足两个分组的条件,完全匹配你给出的示例结果(当用户职位是Permanent、性别是Male时,会筛选出A、B、D三条数据)
对应的原生SQL
以用户职位为Permanent、性别为Male为例,上述查询生成的原生SQL如下:
select * from `items` where (`Position` = 'All' or `Position` = 'Permanent') and (`Gender` = 'All' or `Gender` = 'Male')
内容的提问来源于stack exchange,提问作者Untamable Beast
相关产品推荐
相关产品推荐

