我有三张桌子和一个数据透视表:
公司
roleuserable_id
roleuserable_type
用户
user_id
角色
role_id
从我有关系的公司开始
public function roles()
{
return $this->morphToMany('App\Role', 'roleuserable', 'role_user')->withPivot('user_id');
}
我如何能够实现类似的功能,因为知道下面的块会导致错误:
// The company
$company = Company::first();
// Sync data
$data = [
1 => [[user_id => 1], [user_id=>2]],
2 => [[user_id => 1], [user_id => 3]]
];
// Data sync
$company->roles()->sync($data);
答案 0 :(得分:0)
编辑 -
好的,在您发表评论后,我意识到我们所遵循的方法是完全错误的。我们必须单独角色属于多个用户和角色属于多个公司,反之亦然....
role_user
| role_id | user_id |
| 1 | 1 |
| 1 | 2 |
| 2 | 1 |
| 2 | 3 |
company_role
| role_id | company_id |
| 1 | 1 |
| 2 | 1 |
可以通过
选择$companyUsers = $company->roles()->flatMap(function($role) {
return $role->users;
});
$userCompanies = $user->roles()->flatMap(function($role) {
return $role->companies;
});