Laravel sync()枢轴列,其值为数组,为额外字段

时间:2016-11-25 12:44:20

标签: laravel laravel-5 eloquent

我有三张桌子和一个数据透视表:

公司

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);

1 个答案:

答案 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;
                });