2016-07-29 105 views
0

似乎無法找到什麼,我試圖讓別的使用多態關係的工作。經過了做錯了我有兩個表設置: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

回答

0

改變了我的關係在我的存款模式,它的工作原理:

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

還是搞清楚我爲什麼要添加它,因爲它也應該沒有它。