我有一个关于如何定义以下关系的快速问题
我有一个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_type
和USER
并获得额外的userables
表格?
有没有人知道这是如何工作的,我是否完全误解了多态关系的作用?
答案 0 :(得分:0)
在多对多的多态关系中,你应该有userables表和users表。并且userable_id
和userable_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);
}