You need to enable JavaScript to run this app. 如何在Laravel Eloquent中使用DISTINCT ON实现查询
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 07:54:03