2013-07-31 1 views
0

У меня проблема при использовании метода синхронизации. Пожалуйста, помогите мне здесь.Laravel 4 BelongsToMany метод синхронизации не работает

У меня есть три таблицы, как показано ниже.

Таблица: 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-запрос не является правильным.

meesage Ошибка:

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. Это не то, что я хочу. Может ли кто-нибудь сказать мне, что я сделал не так?

Большое спасибо.

ответ

0

Я решил свою проблему. Это вызвано ошибкой при создании отношений.

Отношения должны быть, как код ниже:

class Role extends Eloquent 
{ 
    /** 
    * Permissions 
    */ 
    public function permissions() 
    { 
     return $this->belongsToMany('Permission', 'tbl_link_roles_permissions', 'id_role', 'id_permission'); 
    } 
} 

class Permission extends Eloquent 
{ 
    /** 
    * Roles 
    */ 
    public function roles() 
    { 
     return $this->belongsToMany('Role', 'tbl_link_roles_permissions', 'id_permission', 'id_role'); 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^