Laravel使用distinct查询hrbp为HRBP1的不重复direction列表
需求实现调整方案
你当前编写的查询逻辑整体思路正确,但存在两个实际落地时会影响使用的问题,调整后即可稳定获取目标不重复direction列表:
- 原代码使用
get()方法返回的是包含stdClass对象的集合,每个元素是挂载了direction属性的对象,并非可直接使用的纯direction值列表,后续业务逻辑里取值需要额外判断属性,会增加冗余代码。 - 原代码在
distinct()之前先执行select('direction'),在部分低版本Laravel的多条件查询场景下,这种写法可能出现distinct生效异常,返回重复的direction值。
可直接使用的优化代码
- 轻量场景写法(单表查询、逻辑简单时使用):
$ListDirectionHRBP1 = DB::table('agendas') ->where('hrbp', 'HRBP1') ->distinct() ->pluck('direction'); - 兼容性更强的通用写法:
$ListDirectionHRBP1 = DB::table('agendas') ->where('hrbp', 'HRBP1') ->groupBy('direction') ->pluck('direction');
注意事项
- 查询构造器中
where方法的第三个参数为条件运算符,等值判断是默认规则,原写法里的'='可以省略,让代码更简洁。 - 替换后的
pluck('direction')方法会直接返回提取好的纯direction值集合,如果需要转换成PHP原生数组,只要在方法链最后追加->toArray()即可,不需要额外遍历对象拆值。 - 如果后续需求扩展为关联其他表、增加多维度筛选条件,优先使用带
groupBy的写法,避免多表关联场景下distinct去重失效的问题。
内容的提问来源于stack exchange,提问作者Saliou MBALO
相关产品推荐
相关产品推荐

