Pregunta

Intento hacer una relación de muchos a muchos entre 2 modelos: Uss_role y Uss_Right

class Model_Users_Role extends ORM{
    protected $_has_many = array(
        'rights' => array(
            'model'   => 'users_right',
            'through' => 'users_roles_rights',
        ),
    ); 
}

class Model_Users_Right extends ORM{    
    protected $_has_many = array(
        'roles' => array(
            'model'   => 'users_role',
            'through' => 'users_roles_rights',
        ),
    );
}

Estoy tratando de hacer esto:

$role = ORM::factory('users_role', 1);
$right = ORM::factory('users_right', 1);
$right->add('roles', $role);

Error:

Database_Exception [ 1054 ]: Unknown column 'role_id' in 'field list' [ INSERT INTO `users_roles_rights` (`users_right_id`, `role_id`) VALUES ('1', '1') ]

Intenté hacerlo en el otro lado:

$role = ORM::factory('users_role', 1);
$right = ORM::factory('users_right', 1);        
$role->add('rights', $right);

Nuevo error:

Database_Exception [ 1054 ]: Unknown column 'right_id' in 'field list' [ INSERT INTO `users_roles_rights` (`users_role_id`, `right_id`) VALUES ('1', '1') ]

Esperaba que ORM usara users_role_id y users_right_id Nombres de campo en la tabla Pivot, pero usa el nombre incorrecto de la tecla lejana? ¿Dónde he cometido un error?

¿Fue útil?

Solución

Mira donde el Los valores predeterminados están establecidos. Prueba esto:

class Model_Users_Role extends ORM{
    protected $_has_many = array(
        'rights' => array(
            'model'   => 'users_right',
            'far_key' => 'users_right_id',
            'through' => 'users_roles_rights',
        ),
    ); 
}

class Model_Users_Right extends ORM{    
    protected $_has_many = array(
        'roles' => array(
            'model'   => 'users_role',
            'far_key' => 'users_role_id',
            'through' => 'users_roles_rights',
        ),
    );
}

Kohana no verifica que la relación aún no exista.

O imprima esto en la tabla de la base de datos con una tecla única compuesta en las dos columnas de la clave extranjera, o haga que su código verifique que la relación aún no exista antes de agregar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top