2016-03-04 124 views
0

我想創建(上Laravel 5.2)兩個實體之間的支點創建一個比其他ID相關領域的數據透視表,讓我們假設我們有實體的用戶和電話。在我們的世界中,用戶可以擁有多部手機,而手機可以擁有多個擁有者。如何在Laravel 5.2

是有原因的,我必須針對用戶的手機由它的序列號和構建年(我們假設連續不能在同一年相同)。

所以我有我的表users,phonesusers_phones

===== Table users ===== 
id 
username 
... 

===== Table phones ==== 
id 
serial_numer 
build_year 

===== Table users_phones ==== 
user_id 
phone_serial 
phone_build_year 

我有我的模型電話我關係:

public function users() 
{ 
    return $this->belongsToMany(
      User::class, 
      'users_phones', 
      'user_id', 
      'phone_serial' 
     )->withPivot('phone_build_year'); 
} 

當我wan't添加一些條目這樣的:

$phone->users()->attach([$user->id => [ 
    'phone_build_year' => $phone->build_year 
]]); 

生成的SQL請求是以下一個:

insert into `users_phones` (`user_id`, `phone_serial`, `phone_build_year`) values (1, 5, 2016) 

我的問題是,sql請求中的5是電話號碼,而不是它的序列號。我沒有找到如何精確到Laravel使用我們選擇的字段(這裏是序列號)而不是id。

是否有可能做到這一點,還是我註定要創建一個模型來處理我的特殊透視表?我承認,如果我能避免這種情況,我將不勝感激。

+1

Laravel不會讓你做到這一點 - 它僅允許'belongsToMany'相關車型的'主要key'。您可以爲數據透視表使用其他模型,也可以在'BelongsToMany'關係上創建自定義實現。 –

+0

這就是我的想法,太糟糕了!感謝您的答案。 – Okipa

回答

0

所以,作爲亞雷克說,似乎是沒有辦法來定製Laravel支點的關係,因爲我想這樣做。我將創建一個專用於這種特殊情況的模型。 無論如何,如果有人有一個更好,更優雅的方式來做這種Laravel自定義樞軸關係,請分享您的知識!