如何在Laravel Eloquent中使用DISTINCT ON实现查询
解决方案
可以通过selectRaw方法手写DISTINCT ON逻辑实现需求,修改后代码如下:
use Illuminate\Support\Facades\DB; public function fetchgroup(){ $all_groups = HmsBbrGroup::leftJoin('hms_bbr_group_type', 'hms_bbr_group.group_type_id', '=', 'hms_bbr_group_type.group_type_id') ->selectRaw('DISTINCT ON (hms_bbr_group.group_id) hms_bbr_group.group_id, hms_bbr_group.id, hms_bbr_group.group_name, hms_bbr_group.group_description, hms_bbr_group.group_type_id, hms_bbr_group_type.group_type_name, hms_bbr_group.category_id, hms_bbr_group.effective_start_datetime, hms_bbr_group.created_by, hms_bbr_group.created_datetime, hms_bbr_group.archived_by, hms_bbr_group.archived_datetime') ->orderBy('hms_bbr_group.group_id') ->orderBy('hms_bbr_group.id', 'DESC') ->get(); return response()->json([ 'all_groups' => $all_groups, ]); }
注意事项
- 由于
DISTINCT ON是PostgreSQL独有的语法,该方案仅适用于PostgreSQL数据库 - Laravel的
distinct()方法仅支持布尔值参数,作用是生成全局去重的SELECT DISTINCT逻辑,无法实现按指定字段分组去重的效果,因此必须通过原生SQL片段实现 - 多个排序规则需要链式调用多次
orderBy方法,不能在单个orderBy中传入多个排序字段参数
内容的提问来源于stack exchange,提问作者user16409170
相关产品推荐
相关产品推荐

