Kohana 3.2 Orm plusieurs-à-plusieurs - Mauvais noms de champs
-
29-10-2019 - |
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?
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