Kohana 3.2 orm molti-to-many-nomi di campo sbagliato
-
29-10-2019 - |
Domanda
Sto cercando di fare una relazione molti-a-molti tra 2 modelli: Users_Role e 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',
),
);
}
Sto cercando di farlo:
$role = ORM::factory('users_role', 1);
$right = ORM::factory('users_right', 1);
$right->add('roles', $role);
Errore:
Database_Exception [ 1054 ]: Unknown column 'role_id' in 'field list' [ INSERT INTO `users_roles_rights` (`users_right_id`, `role_id`) VALUES ('1', '1') ]
Ho provato a farlo dall'altra parte:
$role = ORM::factory('users_role', 1);
$right = ORM::factory('users_right', 1);
$role->add('rights', $right);
Nuovo errore:
Database_Exception [ 1054 ]: Unknown column 'right_id' in 'field list' [ INSERT INTO `users_roles_rights` (`users_role_id`, `right_id`) VALUES ('1', '1') ]
Mi aspettavo che ORM usasse users_role_id
e users_right_id
Nomi dei campi nella tabella pivot, ma utilizza il nome errato della chiave lontana? Dove ho fatto un errore?
Soluzione
Scopri dove il I valori predefiniti sono impostati. Prova questo:
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 non verifica che la relazione non esista già.
Opponiamolo nella tabella del database con una chiave univoca composita sulle due colonne a chiave estera o fai verificare che il codice non esista già prima di aggiungere.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow