Non puoi usare una belongs to su un campo che non sia primary key della tabella a cui punti, e non ha senso farlo se il campo non e’ unico nell’altra tabella, se e’ unico rendilo primary key.
Boh. Scusami, dato che i ruoli degli user possono essere modificati, cancellati, etc, penso sia normale non riferirsi alla Pk ma ad un code associato. Soprattutto quando vado a richiamare tutti i role dentro ad una dropdown, agli option gli passo il code, non l’id.
Correggimi se sbaglio, ma l’applicazione demo del blog non fa una cosa simile con la tabella ‘tbl_lookup’? e poi a seconda della stringa ‘type’ passata, recupera i valori.
private static function loadItems($type)
{
self::$_items[$type]=array();
$models=self::model()->findAll(array(
'condition'=>'type=:type',
'params'=>array(':type'=>$type),
'order'=>'position',
));
foreach($models as $model)
self::$_items[$type][$model->code]=$model->name;
}
io faccio la stessa identica cosa, uguale uguale
private static function loadRoles($type)
{
self::$_roles[$type] = array();
$models = self::model()->findAll(array(
'condition'=>'type=:type',
'params'=>array(':type'=>$type),
'order'=>'code',
));
foreach($models as $model)
self::$_roles[$type][$model->code]=$model->name;
}
nel mio caso i type sono ‘internal’ e ‘client’, quindi a seconda del type passato mi restituisce tutti i code corrispettivi. Questa è la mia tabella role
id code type name
1 1 internal admin
2 2 internal operator
3 3 internal account
4 1 client admin
5 2 client operator
Come detto prima, se non stessi lavorando con Yii, utilizzeri una semplice join. Se mi dici che i db non si usano così, come potrei fare?