2010-08-15 3 views
1

Привет У меня есть некоторые проблемы с созданием моего запроса в доктриной:Doctrine Query проблема

My 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 = ? 
) 

Так bassicaly Я хочу, чтобы выбрать каждый пилот сотрудник с 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 

Спасибо за помощь мне, Дэвид

+1

Вы забыли закрытие ')' в подзапросе. Не знаю, вызвало ли это нарушение производительности, так как запрос не такой огромный. – DrColossos

+0

@DrColossos это почти наверняка, так как ошибка вызывается Tokenizer. – jeremiahd

ответ

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) 
+0

Спасибо, какая глупая ошибка – David

0

Вы можете попробовать добавить -> предел (20) энто ввод получить первые 20 записей или использовать sfDoctrinePager в Symfony (если вы его используете) для обработки других записей. Существует также встроенный Doctrine_Pager в Доктрине.

PS. попробуйте использовать Doctrine_Query :: getSqlQuery() для получения необработанного SQL-запроса.