2012-01-20 2 views
0

J'ai cette requête SQL:Doctrine 1.2: Ne peut pas reproduire la requête avec Doctrine_Query

select * 
from tblapplicant AS a 
WHERE a.napplicantid 
not in (
select napplicantid 
from tblcontract 
where dstart BETWEEN '2011-10-27' AND '2012-01-26' 
OR dend BETWEEN '2011-10-27' AND '2012-01-26') 

Et je veux construire cette requête dans Doctrine 1.2:

$Query = Doctrine_Query::create() 
        ->select('a') 
        ->from('tblapplicant a') 
        ->innerJoin('a.tblintermediair i') 
        ->where('i.nintermediairid = ? ', $intermediairid) 
        ->addWhere('a.napplicantid NOT IN (select c.napplicantid from tblcontract c WHERE c.dstart BETWEEN ? AND ? OR c.dend BETWEEN ? AND ?)', array($this->tbljobavailable->getFirst()->dday, $this->tbljobavailable->getLast()->dday, $this->tbljobavailable->getFirst()->dday, $this->tbljobavailable->getLast()->dday)); 

mais en quelque sorte il continue se plaindre: Impossible de trouver la classe c

Des idées?

Répondre

0

J'ai eu ce problème il y a quelques jours.

L'une des solutions possibles consiste à ajouter une relation un-à-un pour une table tblapplicant elle-même. Je n'ai pas aimé celui-ci, donc juste créé une requête supplémentaire pour obtenir des identifiants pour l'exclusion. Dans votre cas, ce serait comme ceci:

$notIn = Doctrine_Query::create()->(put your subselect query here)->execute(array(), Doctrine_Core::HYDRATE_SINGLE_SCALAR); 

$Query = Doctrine_Query::create() 
       ->select('a') 
       ->from('tblapplicant a') 
       ->innerJoin('a.tblintermediair i') 
       ->where('i.nintermediairid = ? ', $intermediairid) 
       ->whereNotIn('a.napplicantid', $notIn); 
Questions connexes