Question

J'essaie de faire des relations multiples à plusieurs entre 2 modèles: Users_role et users_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',
        ),
    );
}

J'essaye de faire ceci:

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

Erreur:

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

J'ai essayé de le faire de l'autre côté:

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

Nouvelle erreur:

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

Je m'attendais à ce que ORM utilise users_role_id et users_right_id Noms de champ dans la table pivot, mais il utilise un mauvais nom de la clé FAR? Où j'ai fait une erreur?

Était-ce utile?

La solution

Découvrez où le Les valeurs par défaut sont définies. Essaye ça:

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 ne vérifie pas que la relation n'existe pas déjà.

Soit appliquer cela dans la table de la base de données avec une clé unique composite sur les deux colonnes de clé étrangère, soit faire vérifier votre code que la relation n'existe pas déjà avant d'ajouter.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top