2017-04-01 52 views
0

同步我有3种型号,许多一对多的关系:3种型号多到很多Laravel 5.4

模块

public function permissionTypes() 
{ 
    return $this->belongsToMany(PermissionType::class, 'permissions')->withPivot('role_id'); 
} 

public function roles() 
{ 
    return $this->belongsToMany(Role::class, 'permissions')->withPivot('permission_type_id'); 
} 

角色

public function permissionTypes() 
{ 
    return $this->belongsToMany(PermissionType::class, 'permissions')->withPivot('module_id'); 
} 

public function modules() 
{ 
    return $this->belongsToMany(Module::class, 'permissions')->withPivot('permission_type_id'); 
} 

权限类型

public function roles() 
{ 
    return $this->belongsToMany(Role::class, 'permissions')->withPivot('module_id'); 
} 

public function modules() 
{ 
    return $this->belongsToMany(Module::class, 'permissions')->withPivot('role_id'); 
} 

表描述:

模块

id 
title 
status 

角色

id 
title 

permission_types

id 
title 

透视表权限

id 
role_id 
module_id 
permission_type_id 

同步样子:

//array of ids from request to synchronization 
$permissions = $request['permissions']; 

//role by id from request 
$role = Role::findOrFail((int)$roleId); 

//module by id from request 
$module = Module::findOrFail((int)$moduleId); 

//synchronization 
$pivotData = array_fill(0, count($permissions), ['role_id' => $role->id]); 
$syncData = array_combine($permissions, $pivotData); 
$module->permissionTypes()->sync($syncData); 

当试图实现同步,有一个错误在康涅狄格州

QueryException ection.php line 647: SQLSTATE [42000]:语法错误或访问冲突:1066非唯一表/别名:'permissions'(SQL:select permissions。*,permissionsrole_id as pivot_role_idpermissionspermission_id as pivot_permission_id from permissions inner join permissions on permissionsid = permissionspermission_id其中permissionsrole_id = 1)

感谢

回答

0

恕我直言,你想设计出三倍多到不存在Laravel许多。解决方案通常是为了定义hasManyThrough关系,给出数据透视表(在您的案例中为permissions)Model(权限,代码如下)。

如果我深知你的表结构,我会设计了如下关系:

模块

public function permissions() 
{ 
    return $this->hasMany(Permission::class); 
} 
public function roles() 
{ 
    return $this->hasManyThrough(Role::class, Permission::class); 
} 
public function permissionTypes() 
{ 
    return $this->hasManyThrough(PermissionType::class, Permission::class); 
} 

角色

public function permissions() 
{ 
    return $this->hasMany(Permission::class); 
} 
public function permissionTypes() 
{ 
    return $this->hasManyThrough(PermissionType::class, Permission::class); 
} 
public function modules() 
{ 
    return $this->hasManyThrough(Module::class, Permission::class); 
} 

PermissionType

public function permissions() 
{ 
    return $this->hasMany(Permission::class); 
} 
public function modules() 
{ 
    return $this->hasManyThrough(Module::class, Permission::class); 
} 
public function roles() 
{ 
    return $this->hasManyThrough(Role::class, Permission::class); 
} 

权限

​​

告诉我,如果它可以为你工作。

+0

谢谢。你能帮助一个工作的例子,如何更新数据透视表的每一行? –

+0

我发现它 - http://stackoverflow.com/questions/27230672/laravel-sync-how-to-sync-an-array-and-also-pass-additional-pivot-fields。假设,这是我的情况,但上面有一个错误 –