同步我有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
。*,permissions
。role_id
aspivot_role_id
,permissions
。permission_id
aspivot_permission_id
frompermissions
inner joinpermissions
onpermissions
。id
=permissions
。permission_id
其中permissions
。role_id
= 1)
感謝
謝謝。你能幫助一個工作的例子,如何更新數據透視表的每一行? –
我發現它 - http://stackoverflow.com/questions/27230672/laravel-sync-how-to-sync-an-array-and-also-pass-additional-pivot-fields。假設,這是我的情況,但上面有一個錯誤 –