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

Laravel 9左连接查询时feedback.id返回null问题求助

问题排查与解决

核心问题分析

  1. 字段名拼写错误:两张数据表中的关联字段是examiId(末尾带i),但代码里全程写的是examId,这直接导致两张表无法通过该字段建立关联,自然拿不到feedback.id的值。
  2. 关联条件用法错误:在leftJoin的闭包中,centerId的匹配应该用on而非where。用where会把关联条件转为全局过滤逻辑,破坏左连接的特性,即便字段拼写正确也可能返回null。

修正后的代码

$center = DutySheet::select('duty_sheets.centerId', 'duty_sheets.centerName', 'feedback.id')
    ->leftJoin('feedback', function ($leftJoin) {
        $leftJoin->on('duty_sheets.examiId', '=', 'feedback.examiId')
            ->on('duty_sheets.centerId', '=', 'feedback.centerId')
            ->where('feedback.inspectorId', 1);
    })
    ->where('duty_sheets.examiId', 1)
    ->where('p20', 1)
    ->get();

dd($center);

关键修改说明

  • 把所有examId替换为数据表实际存在的examiId,保证字段匹配一致。
  • 将duty_sheets.centerId与feedback.centerId的匹配逻辑从where改为on,确保这是表与表之间的关联条件,而非对最终结果集的过滤。
  • 保留feedback.inspectorId = 1作为关联时的筛选条件,这部分用where是合理的,因为它是对关联表数据的定向过滤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 03:33:27