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

Laravel多表查询遇'id'字段歧义错误,需返回指定格式数据

解决Laravel多表关联查询的字段歧义及关联错误问题

你的代码存在两个核心问题,导致SQL执行报错:

问题1:字段歧义

查询的id、subject_id等字段在多个关联表中存在(比如questionbank和quizzes都有id),SQL无法确定要取哪个表的字段,因此抛出Column 'id' in field list is ambiguous错误。

问题2:关联条件错误

第一个join的关联条件写错了:questionbank_id.id是无效的,中间表questionbank_quizzes中存储关联关系的字段应该是questionbank_id(对应questionbank表的id),而非questionbank_id.id;另外你还把quiz_id写成了quize_id,这也会导致关联失败。

修正后的代码

$questions = DB::table('questionbank')
    ->join('questionbank_quizzes', 'questionbank_quizzes.questionbank_id', '=', 'questionbank.id')
    ->join('quizzes', 'quizzes.id', '=', 'questionbank_quizzes.quiz_id') // 修正quize_id为quiz_id
    ->where('questionbank.subject_id', '=', $request->subject_id) // 指定subject_id所属表
    ->select(
        'questionbank.id',
        'questionbank.subject_id',
        'questionbank.topic_id',
        'questionbank.question_type',
        'questionbank.question',
        'questionbank.marks',
        'questionbank.difficulty_level',
        'questionbank.status',
        'quizzes.title as quiz_title' // 给title起别名,避免字段冲突(可选,但更清晰)
    )
    ->get();

说明

  • 所有查询字段都明确指定所属表(比如questionbank.id),彻底解决字段歧义问题;
  • 修正了关联条件中的字段名错误,确保关联关系正确;
  • 给quizzes.title起别名quiz_title,可以让返回的字段名更直观,也避免和其他可能的title字段冲突;
  • 返回的结果会包含你需要的所有字段,格式符合要求:{id: 2665, subject_id: "78", topic_id: "95", question_type: "radio", ..., quiz_title: "xxx"}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 10:30:47