Laravel多对多的多态关系

时间:2016-10-19 09:54:36

标签: laravel eloquent polymorphism relationships

我有一个关于如何定义以下关系的快速问题

我有一个USER,可以属于许多Councils,许多Schools和许多Businesses

现在我知道我可以为上述所有内容设置一个数据透视表,例如

council_user
school_user
business_user

这意味着我可以退出所有councils user所属的数据库,所有businesses

为了拯救我这样做有一个更好的方法,有3 pivot tables,我可以使用多对多多态关系并以这种方式这样做,如果有的话,任何人都知道这看起来像一个表结构?

我觉得它会像......

business
id - integer
name - string

council
id - integer
name - string

school
id - integer
name - string

userables
user_id - integer
userable_id - integer
userable_type - string

如果是,我是否会从userable_is表格中删除userable_typeUSER并获得额外的userables表格?

有没有人知道这是如何工作的,我是否完全误解了多态关系的作用?

1 个答案:

答案 0 :(得分:0)

在多对多的多态关系中,你应该有userables表和users表。并且userable_iduserable_type应该位于用户表中的不可用表中。

可用表:

user_id   userable_id  userable_type
1         1             App\Business
1         2             App\School
...

商业,学校和理事会模式:

public function users()
{
    return $this->morphToMany('App\User', 'userable');
}

用户模型

public function businesses()
{
      return $this->morphedByMany('App\User', 'userable');
}

public function schools()
{
      return $this->morphedByMany('App\User', 'userable');
}

public function councils()
{
      return $this->morphedByMany('App\User', 'userable');
}

然后,这为用户的所有业务提供了user_id 1。

$users=User::find(1);
foreach($user->businesses as $business)
{
   print_r($business->name);
}

请参阅文档中的Many to many polymorphic relation