2013-07-31 2 views
0

sync() 메서드를 사용할 때 문제가 있습니다. 제발 도와주세요.Laravel 4 BelongsToMany sync() 메서드가 제대로 작동하지 않습니다.

다음 세 개의 표가 있습니다.

테이블 :

+----------------+------------------+------+-----+---------+----------------+ 
| 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_roles : 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'); 
    } 
} 
:

관계는 아래의 코드 같아야

관련 문제