2016-11-25 55 views
1

我有三个表和枢轴表枢轴柱角色Laravel同步()与值的数组作为额外的字段

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

假设键进行选择* 1 *,* 2 *来自'$ data'数组是公司的ID吗? – TheFallen

+0

@TheFallen nope。他们是角色ID。实际上接受具有相同角色的多个用户(在这种情况下为公司)。 –

回答

0

编辑 -

好的,在您发表评论后,我意识到我们所遵循的方法是完全错误的。我们必须使一个单独的角色BelongsToMany用户角色BelongsToMany公司反之亦然....

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; 
       }); 
+0

感谢您的回答@prateekkathal。我在这里看到的唯一问题是“用户”模式中的所有“公司”与“角色”的关系。 –

+0

@ whym.e刚刚编辑我的答案...你可以看看它。我认为这应该适合你:) – prateekkathal

+0

嗯......这里我们有两张表,但问题是用户可以为不同的公司有不同的角色。 I.E. admin [1],editor [2]等等。在这个例子之后,我可能会在用户的roles_id上留下重复的内容。我正在考虑使用常规插入的透视模型解决方案。 –