2013-12-17 109 views
1

我想創建一個與多個樞軸表的多態關係。我有一張可以分配給賬戶,角色,旅程和國家的需求表。這需要是多對多的關係,因爲相同的要求可能適用於多個國家和/或旅行和/或賬戶等。Laravel 4多態與多個樞軸表

然後,我需要一張表格,列出用戶的突出要求。例如:如果用戶有一個特定的帳戶並且有與該帳戶相關的需求,那麼這些需求將被添加到用戶的需求清單中。

我的一個解決方案是首先將需求分配給在多對多關係中使用數據透視表的帳戶,角色,旅程和國家/地區。然後使用多態關係,我會將用戶連接到任何關聯數據透視表。

但我不知道該怎麼做,或者甚至有可能?

這裏是我的表:

user_requirements
- ID
- USER_ID
- requireable_id
- requireable_type

account_requirement
- ID
- ACC ount_id
- requirement_id

role_requirement
- ID
- ROLE_ID
- requirement_id

trip_requirement
- ID
- ACCOUNT_ID
- requirement_id

country_requirement
- ID
- ACCOUNT_ID
- requirement_id

+0

這裏有一個類似的帖子: [laravel-多對多海報] [1] 你能回答這個職位。 [1]:http://stackoverflow.com/questions/21966465/laravel-manytomany-multiple – CRIMUVI

回答

1

Laravel 4.1現在支持多態多對多關係。

以下示例顯示了我如何實現與產品和帖子共享照片。

DB模式

照片

id    integer 
filename  string 
alt    string 

photoable

id    integer 
photoable_id integer 
photoable_type string 

模式

照片模式

class Photo extends Eloquent 
{ 
public function products(){ 
    return $this->morphedByMany('Product', 'photoable'); 
} 

public function posts(){ 
    return $this->morphedByMany('Post', 'photoable'); 
} 
} 

產品型號

class Product extends Eloquent 
{ 
public function photos(){ 
    return $this->morphToMany('Photo', 'photoable'); 
} 
} 

郵政型號

class Post extends Eloquent 
{ 
public function photos(){ 
    return $this->morphToMany('Photo', 'photoable'); 
} 
} 

通過上述,我可以訪問它連接到一個產品的所有照片如下:

$product = Product::find($id); 
$productPhotos = $product->photos()->all(); 

我也可以迭代顯示所有照片作爲任何集合o f模型。

foreach ($productPhotos as $photo) 
{ 
    // Do stuff with $photo 
} 

以上幾乎可以完全按照您的要求進行復制。

  1. 創建requirements
  2. 創建一個requireable
  3. Requirement模型,聲明所有morphedByMany關係
  4. 在國家,旅行,角色等申報morphToMany關係

NB - 我在S/O中沒有代碼編輯器的情況下寫了這個,所以可能會出現錯字,錯誤或者兩個錯誤 - 但是概念保持不變。