2012-01-20 1 views
0

У меня есть этот SQL-запрос:Doctrine 1.2: Невозможно воспроизвести запрос с 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') 

И я хочу, чтобы построить этот запрос в доктриной 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)); 

, но как-то он держит жаловаться: Не удалось найти класс c

Любые идеи?

ответ

0

Только что этот вопрос был несколько дней назад.

Одним из возможных решений является добавление отношения один к одному для таблицы tblapplicant. Мне это не понравилось, поэтому просто создал дополнительный запрос, чтобы получить идентификаторы для исключения. В вашем случае это будет выглядеть так:

$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);