You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel联表查询获取objectives.id返回media.id,如何用AS别名解决

原因

多表关联查询时,objectives、users、media三张表都存在名为id的同名字段,Laravel查询构造器默认会按关联顺序覆盖同名字段的返回值,因此后关联的media表的id会覆盖先查询的objectives表的id。

解决方案

通过select()方法显式指定需要查询的字段,对同名字段添加别名区分即可,修改后的代码示例:

$objectives = DB::table('objectives')
    ->select(
        'objectives.*',
        'objectives.id as objective_id', // 目标字段设置独立别名
        'users.id as user_id',
        'users.name as assigned_user_name',
        'media.id as media_id',
        'media.file_path as training_document_path'
        // 其余需要的字段按需添加,同名字段注意设置别名即可
    )
    ->join('users', 'objectives.assigned_id', '=', 'users.id')
    ->join('media', 'objectives.training_document_id', '=', 'media.model_id')
    ->where('objectives.assigned_id', '=', $assigned_id)
    ->where('media.model_type', '=', 'App\Models\TrainingDoc')
    ->distinct()
    ->get();

补充说明

  • 视图中可以直接通过objective_id获取原objectives.id的数值,不会再被其他表的同名字段覆盖
  • Laravel的distinct()方法本身不接收字段参数,如果你需要按objectives.id去重,也可以将distinct()替换为groupBy('objectives.id'),两种方式都可以达到去重效果,根据业务场景选择即可。

内容的提问来源于stack exchange,提问作者dastuk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:15:03