Laravel Eloquent关联两张表后未显示关联表数据求助
解决Eloquent关联未加载Table2数据的问题
嘿,我一眼就看出问题出在哪了——你搞反了关联方向,还写错了外键参数,咱们一步步来修正:
问题根源
先理清楚你的表关系:
- Table2里的
Id_table1字段是用来关联Table1的Id的,这说明Table1是主表,Table2是依赖它的从表。 - 你在Table1模型里用了
belongsTo,这完全搞反了关系!belongsTo是从表(比如Table2)用来关联主表(Table1)的方法,主表关联从表应该用hasOne或者hasMany。 - 另外,就算你硬要用
belongsTo(虽然方向错了),第二个参数写id也不对,那不是对应的外键字段。
正确的关联设置
修正Table1模型
从你的示例数据来看,每个Table1对应一条Table2数据,所以用hasOne:
class Table1 extends Model{ public function yoman() { // 语法:hasOne(关联模型, 从表的外键字段, 主表的主键字段) return $this->hasOne(Table2::class, 'Id_table1', 'Id'); } }
如果一个Table1对应多条Table2数据,把hasOne换成hasMany就行,参数保持不变。
(可选)Table2模型的反向关联
要是之后你需要从Table2查询对应的Table1数据,Table2模型可以这么写:
class Table2 extends Model{ public function table1() { // 语法:belongsTo(关联模型, 当前表的外键字段, 关联表的主键字段) return $this->belongsTo(Table1::class, 'Id_table1', 'Id'); } }
验证效果
现在运行你的控制器代码:
public function gets(){ $data = Table1::with('yoman')->get(); // 可以用dd($data)查看结果,每个Table1实例里都会带上对应的Table2数据 }
就能正常看到关联的Table2数据啦!
内容的提问来源于stack exchange,提问作者Adriyana Putra Pratama
相关产品推荐
相关产品推荐

