Laravel一对多关系

问题描述:

似乎无法找到什么,我试图让别的使用多态关系的工作。经过了做错了我有两个表设置:Laravel一对多关系

付款:

- id 
- name 
- etc.. 

存款:

- id 
- payment_id 
- name 
- etc.. 

我的模型关系:

付款:

public function deposits() 
{ 
    return $this->hasMany(Deposit::class); 
} 

存款:

public function payments() 
{ 
    return $this->belongsTo(Payment::class); 
} 

现在我在每个表中的一个记录用于测试目的。显示存款时,我想急于负载支付:

例如:

$deposits = Deposit::with('payments')->get(); 

这不返回与关联的付款,只是返回null的关系。在我的表中,payment_id是1,就像payment表中的id一样。回想起来,这应该起作用。我错过了什么?

编辑,该getQueryLog返回此:

array(3) { [0]=> array(3) { ["query"]=> string(52) "select * from `users` where `users`.`id` = ? limit 1" ["bindings"]=> array(1) { [0]=> int(1) } ["time"]=> float(0) } [1]=> array(3) { ["query"]=> string(24) "select * from `deposits`" ["bindings"]=> array(0) { } ["time"]=> float(0) } [2]=> array(3) { ["query"]=> string(53) "select * from `payments` where `payments`.`id` in (?)" ["bindings"]=> array(1) { [0]=> int(0) } ["time"]=> float(0) } } 

enter image description here

+1

因为laravel假定外键是'table1name_table2name_id',所以您需要在'payments()'函数中指定外键作为第二个参数。所以在你的情况下,它会'返回$ this-> belongsTo(Payment :: class,'payment_id');' – Andrew

+0

我回过头来,它是'return $ this-> hasMany(Deposit :: class,'payment_id') ;'。见[这里](https://laravel.com/docs/5.1/eloquent-relationships#one-to-many)。 – Andrew

+0

@Andrew laravel假设键'ModelName_id',在这种情况下表名无关。 **雄辩将采取拥有模型的“蛇案”名称,并将其后缀为_id ** – xdevnull

改变了我的关系在我的存款模式,它的工作原理:

public function payment() 
{ 
    return $this->belongsTo(Payment::class, 'payment_id'); 
} 

还是搞清楚我为什么要添加它,因为它也应该没有它。