Yii Framework Forum: Cdbcriteria: Specificare Condizioni Di Join Aggiuntive - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Cdbcriteria: Specificare Condizioni Di Join Aggiuntive Rate Topic: -----

#1 User is offline   realtebo 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 633
  • Joined: 03-October 12
  • Location:Ferrara

Posted 02 November 2012 - 10:25 AM

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...
Il computer non ragiona, ma ha sempre ragione.
Ricordalo quando fai il debug
0

#2 User is offline   hyde82 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 62
  • Joined: 15-November 10
  • Location:Italy

Posted 02 November 2012 - 04:58 PM

View Postrealtebo, on 02 November 2012 - 10:25 AM, said:

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'));
1

#3 User is offline   Giacomo 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 69
  • Joined: 03-October 12

Posted 03 November 2012 - 03:35 PM

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 :)
0

#4 User is offline   realtebo 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 633
  • Joined: 03-October 12
  • Location:Ferrara

Posted 04 November 2012 - 11:42 AM

View Posthyde82, on 02 November 2012 - 04:58 PM, said:

prova così:
$criteria->with = array ('rapporti'=>array('on'=>'alias.dataRapporto = data'));


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 !
Il computer non ragiona, ma ha sempre ragione.
Ricordalo quando fai il debug
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users