Doctrine 1.2:无法使用Doctrine_Query重现查询

时间:2012-01-20 14:30:51

标签: php orm doctrine doctrine-1.2

我有这个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 :(得分:0)

几天前刚刚发过这个问题。

可能的解决方案之一是为tblapplicant表本身添加一对一的关系。我不喜欢这个,所以只是创建了额外的查询来获取排除ID。在你的情况下会是这样的:

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