У меня проблема при использовании метода sync (). Пожалуйста, помогите мне здесь.
У меня есть три таблицы, как показано ниже.
Таблица: tbl_roles
+----------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+------------------+------+-----+---------+----------------+
| id_role | int(10) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(60) | NO | UNI | NULL | |
| description | text | YES | | NULL | |
+----------------+------------------+------+-----+---------+----------------+
Таблица: tbl_permissions
+----------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+------------------+------+-----+---------+----------------+
| id_permission | int(10) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(255) | NO | | NULL | |
| description | text | YES | | NULL | |
+----------------+------------------+------+-----+---------+----------------+
Таблица: tbl_link_roles_permissions
+---------------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------+------------------+------+-----+---------+-------+
| id_role | int(10) unsigned | NO | MUL | NULL | |
| id_permission | int(10) unsigned | NO | MUL | NULL | |
+---------------+------------------+------+-----+---------+-------+
Я создал отношения "многие ко многим" между ролями и моделями разрешений.
Ролевая модель:
class Role extends Eloquent
{
/**
* Permissions
*/
public function permissions()
{
return $this->belongsToMany('Permission', 'tbl_link_roles_permissions', 'id_role', 'id_role');
}
}
Модель разрешений:
class Permission extends Eloquent
{
/**
* Roles
*/
public function roles()
{
return $this->belongsToMany('Role', 'tbl_link_roles_permissions', 'id_permission', 'id_permission');
}
}
Когда я запускаю следующий код для синхронизации разрешений ролей. Это дает мне ошибку нарушения ограничения целостности.
Код:
$role = Role::find($id_role);
$permissions = Input::get('role_permissions');
/*
* Permissions array is like array('1','2','3')
* So I convert the value to integer.
*/
$parameters = array();
foreach($permissions as $permission) {
$parameters[] = intval($permission);
}
$role->permissions()->sync($parameters);
Согласно сообщению об ошибке, я обнаружил, что запрос SQL неверен.
Сообщение об ошибке:
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row:
a foreign key constraint fails (`quidz_host_laravel`.`tbl_link_roles_permissions`,
CONSTRAINT `tbl_link_roles_permissions_id_permission_foreign` FOREIGN KEY
(`id_permission`) REFERENCES `tbl_permissions` (`id_permission`)) (SQL: insert into
`tbl_link_roles_permissions` (`id_role`) values (?)) (Bindings: array ( 0 => 1, ))
Он только вставляет id_role. Это не то, что я хочу. Кто-нибудь может сказать мне, что я сделал не так?
Большое спасибо.