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) } }
答
改变了我的关系在我的存款模式,它的工作原理:
public function payment()
{
return $this->belongsTo(Payment::class, 'payment_id');
}
还是搞清楚我为什么要添加它,因为它也应该没有它。
因为laravel假定外键是'table1name_table2name_id',所以您需要在'payments()'函数中指定外键作为第二个参数。所以在你的情况下,它会'返回$ this-> belongsTo(Payment :: class,'payment_id');' – Andrew
我回过头来,它是'return $ this-> hasMany(Deposit :: class,'payment_id') ;'。见[这里](https://laravel.com/docs/5.1/eloquent-relationships#one-to-many)。 – Andrew
@Andrew laravel假设键'ModelName_id',在这种情况下表名无关。 **雄辩将采取拥有模型的“蛇案”名称,并将其后缀为_id ** – xdevnull