嘿,我在创建对教义的查询时遇到了一些问题:
我的sql查询如下所示:
select *
from fs_employee
where role_id = ?
and
id not in
(select e.id
from fs_employee e, fs_plane p
where role_id = ?
and p.pilot_id = e.id
and e.player_id = ?
)
因此,我想选择每个没有被分配到飞机的role_id = 20的飞行员员。
我的学说查询:
Doctrine_Query::Create()
->from('FsEmployee e')
->where('e.role_id = ?', $role)
->andWhere('e.id NOT IN (SELECT e.id FROM FsEmployee e, e.FsPlane p where e.role_id = ? and e.player_id = ?', $role, $id)
->execute();
我的错误:
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 261904 bytes) in C:\sxampp\php\PEAR\symfony\plugins\sfDoctrinePlugin\lib\vendor\doctrine\Doctrine\Query\Tokenizer.php on line 329
感谢您帮助我, 大卫
答案 0 :(得分:1)
由于我的评论和 jeremiahd 的回复正在确定问题,我将再次在此处写一下:
您忘记了子查询中的结束)
。它应该看起来像:
->andWhere('e.id NOT IN (SELECT e.id FROM FsEmployee e, e.FsPlane p where e.role_id = ? and e.player_id = ?)', $role, $id)
答案 1 :(得分:0)
您可以尝试添加 - > gt; limit(20)进入您的条目以获取前20个条目,或者在Symfony中使用sfDoctrinePager(如果您使用它)来处理其他条目。在Doctrine中也有内置的Doctrine_Pager。
PS。尝试使用Doctrine_Query :: getSqlQuery()来获取原始SQL查询。