Doctrine 1.2: невозможно воспроизвести запрос с помощью Doctrine_Query - PullRequest
0 голосов
/ 20 января 2012

У меня есть SQL-запрос:

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

И я хочу построить этот запрос в 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));

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

Есть идеи?

1 Ответ

0 голосов
/ 21 июня 2012

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

Одним из возможных решений является добавление отношения один к одному для самой таблицы 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);
...