Cdbcriteria: Specificare Condizioni Di Join Aggiuntive

Sto realizzando un semplice elenco di persone che non hanno consegnato il rapporto in un dato mese.

tabella Utenti [1 <-> N ] Rapporti

Dove Rapporti ha un campo mysql di tipo data che può soltanto essere il primo giorno dei vari mesi

Mettiamo che voglio l’elenco di chi non ha consegnato il rapporto di ottobre.

Scrivo questa query:




SELECT 


CONCAT (U.nome, ' ', U.cognome) as nomeCompleto


FROM `tbl_utenti` as U


LEFT JOIN tbl_rapporti as R

ON r.dataRapporto = '2012-10-01' AND r.utenteId = P.id


WHERE r.id IS NULL




E tutto funziona in phpMyAdmin, ora sto creando un nuovo data provider per la nuova vista che sto facendo.




$criteria = new CDbCriteria();

$criteria->with = array ('rapporti');

.... etc ...



So come scrivere i criteria->select e i criteria->order, e che gli alias di tabella devono diventare variaibili pubbliche del model utenti.

Sono bloccato nel fatto che non so come specificare la condizione di join AGGIUNTIVA r.dataRapporto = ‘2012-10-01’

Tenete conto che non posso spostare la condizione sul WHERE perchè ovviamente non da gli stessi risultati, dato che cercherebbe contemporaneamente un rapporto per data e per id e quindi non troverebbe nulla

Come si specificano le condizioni di join ?

Devo forse aggiungere una nuova relation tra utenti e rapporti ? Ma come fare perchè accetti la data di rapporto come parametro?

EDIT: ho provato a specificare le condizioni di join nel with, ma …




...  WHERE (rapporti.id IS NULL) AND (dataRapporto='2012-10-01')




che appunto dà zero record…

prova così:

$criteria->with = array (‘rapporti’=>array(‘on’=>‘alias.dataRapporto = data’));

Non so se sia la via migliore, ma con query complesse che richiedono uno o più join, utilizzo CSqlDataProvider

e uso la mia query presa pari pari da phpMyAdmin :)

ehm … cosa intendi per ‘alias’ ? non li dovrebbe attribuire lui automaticamente ?

usando ‘rapporti’ al posto di alias ho potuto anche fare a meno della select… e posso accede ad alcuni campi virtuali di utenti, come per esempio la concatenzione del nome e del cognome in automatico !