il mio problema è che ho una relazione, ma Yii la ignora non eseguendo nessuna JOIN:
La cosa stana è che la relazione con user la interpreta correttamente ma quella con cycle viene completamente ignorata.
E’ forse la relazione many_many a creare questo problema?
Di seguito il codice del controller:
public function actionViewFacultyBoard() {
$criteria=new CDbCriteria;
$criteria->select='*'; // only select the 'title' column
$criteria->with= array('user','cycles');
$criteria->condition='cycles.id=:id';
$criteria->params=array(':id'=>1);
$dataProvider=new CActiveDataProvider('Professor');
$dataProvider->criteria = $criteria;
E questo è il codice della relazione che sta nel model:
public function relations() {
return array(
'cycles' => array(self::MANY_MANY, 'Cycle', 'faculty_board(id_prof, id_cycle)'),
'user' => array(self::BELONGS_TO, 'RegistrationForm', 'id','with'=>'profile'),
);
}
Di seguito il codice della query (ovviamente non funzionante (per sintetizzare ho sostituito i parametri nella select con *)):
SELECT * FROM `professor` `t` LEFT OUTER JOIN `tbl_users` `user` ON (`t`.`id`=`user`.`id`) LEFT OUTER JOIN `tbl_profiles` `profile` ON (`profile`.`user_id`=`user`.`id`) WHERE (cycles.id=:id) LIMIT 10
la relazione è scritta in modo errato perché l’ordine delle chiavi per le relazioni many many prevede che la prima chiave sia del modello cui ci si sta relazionando, quindi dovrebbe diventare
non devi modificare l’ordine dei campi della tabella se ci stai pensando. è una regola di yii di cui ci si è anche lamentati perché la documentazione non la accenna