Laravel 9左连接查询时feedback.id返回null问题求助
问题排查与解决
核心问题分析
- 字段名拼写错误:两张数据表中的关联字段是
examiId(末尾带i),但代码里全程写的是examId,这直接导致两张表无法通过该字段建立关联,自然拿不到feedback.id的值。 - 关联条件用法错误:在
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
相关产品推荐
相关产品推荐

