2013-12-17 86 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中没有代码编辑器的情况下写了这个,所以可能会出现错字,错误或者两个错误 - 但是概念保持不变。