Laravel HAS MANY/BELONGS TO关联返回null问题求助
Laravel关联关系返回null的问题排查与修复
问题场景
现有两张MySQL表:
- strans表(对应模型
Strans,实际表名hc_strans):- id
- trans_code
- trans_description
- step表(对应模型
Sstep,实际表名hc_sstep):- step_id
- step_trans_code(关联strans表的trans_code)
- step_proc_sequence
调用Sstep::with('transCode')->get()后,transCode字段返回null,但手动执行关联查询结果正常。
问题原因
关联关系定义有误,Sstep模型中的transCode方法里,belongsTo的参数顺序搞反了。
Laravel的belongsTo方法参数规则:
belongsTo(关联模型类, 当前模型的外键字段, 关联模型的关联字段)
你当前的写法把当前模型的外键和关联模型的关联字段写反了,导致Laravel无法正确匹配关联数据。
修正方案
修改Sstep模型的transCode方法:
class Sstep extends Model { protected $table = 'hc_sstep'; protected $fillable = [ 'step_trans_code', 'step_proc_sequence' ]; public function transCode() { // 修正参数顺序:当前模型外键是step_trans_code,关联模型的关联字段是trans_code return $this->belongsTo(Strans::class, 'step_trans_code', 'trans_code'); } }
同时确认Strans模型的step关联是正确的,其hasMany参数符合规则:
hasMany(关联模型类, 关联模型的外键字段, 当前模型的关联字段)
无需修改。
修正后重新调用Sstep::with('transCode')->get(),即可正常获取关联的transCode数据。
内容的提问来源于stack exchange,提问作者japiters
相关产品推荐
相关产品推荐

