Ограничить количество извлекаемых записей при использовании Doctrine DQL в Symfony2

У меня есть следующий запрос:

   $latestcontent = $em->createQuery('
            SELECT c.title, c.content, c.lastedit, a.firstname, a.surname
            FROM ShoutMainBundle:Content c, ShoutMainBundle:Admin a
            WHERE c.author = a.id
            ORDER BY c.lastedit ASC'
            );

Что мне нужно сделать, так это ограничить количество записей, возвращаемых этим запросом. Однако, когда я добавляю LIMIT 10 в запрос SQL, он возвращает эту ошибку:

Ошибка: ожидается конец строки, получено «LIMIT».

Итак, я посмотрел и обнаружил, что вы можете добавить ->limit(10) в код (после запроса). Но это затем вызывает эту ошибку PHP:

Fatal error: Call to undefined method Doctrine\ORM\Query::limit() in C:\wamp\www\src\Shout\AdminBundle\Controller\DefaultController.php on line 22

Что я делаю неправильно?


person mickburkejnr    schedule 13.09.2011    source источник


Ответы (1)


Насколько я знаю, в настоящее время нет такого утверждения, как LIMIT для DQL.

Вы должны использовать Запрос::setMaxResults().

person Raffael    schedule 13.09.2011
comment
Это сработало, спасибо. Это меня немного смутило, так как на этой странице написано, что есть команда limit (которую я использовал): doctrine-project.org/documentation/manual/1_1/hu/. Но ваш способ работает, спасибо :) - person mickburkejnr; 13.09.2011
comment
@mickburkejnr: ссылка, которую вы указали в своем комментарии, предназначена для Doctrine 1.2. Symfony2 использует Doctrine 2.1, поэтому документация, которую вы читаете, не соответствует версии, которую вы используете. Эта ссылка предназначена для документации Doctrine 2.1. - person Matt; 13.09.2011
comment
@matt прав, ссылка, которую я предоставил, была 1.1 (я не знал). Это единственное, что меня больше всего раздражает в новом Symfony. Документация есть везде. - person mickburkejnr; 14.09.2011
comment
Ссылка на Doctrine 2.6: doctrine-project.org/projects/doctrine-orm/en/2.6/reference/ (при использовании QueryBuilder) - person Simon Groenewolt; 02.05.2018