Подтвердить что ты не робот

Использовать ограничение и смещение в запросе Doctrine2

Я пытаюсь сделать разбиение на страницы, но есть ошибка:

[Синтаксическая ошибка] строка 0, col 57: Ошибка: ожидаемый конец строки, получился "limit"

Я не совсем уверен, что это правильный синтаксис (и логика), чтобы сделать мой запрос:

public function getFriendsFromTo ($user, $limit, $offset)
{
     return $this->getEntityManager()
        ->createQuery('SELECT f FROM EMMyFriendsBundle:Friend f WHERE f.user='.$user.' limit '.$limit. 'offset' .$offset)
        ->getResult();
}

Друзья и пользователи связаны с manyToOne и oneToMany, поэтому в таблице друзей есть поле - user_id.

Это в моем контроллере:

$user = $this->get('security.context')->getToken()->getUser();
$id = $user->getId();

$friends = $user->getFriends();
$result = count($friends)
$FR_PER_PAGE = 7;
$pages = $result/$FR_PER_PAGE;

$em = $this->getDoctrine()->getEntityManager();
$friends = $em->getRepository('EMMyFriendsBundle:Friend')
         ->getFriendsFromTo($id, $FR_PER_PAGE, $page*$FR_PER_PAGE); 

Я знаю, что это глупо и даже неправильно (особенно третий параметр должен быть $page*$FR_PER_PAGE), но я просто хотел попробовать, если запрос работает, и это не так.

4b9b3361

Ответ 1

Неа. Использование:

  return $this->getEntityManager()
        ->createQuery('...')
        ->setMaxResults(5)
        ->setFirstResult(10)
        ->getResult();

Ответ 2

$towary = $this->getDoctrine()
   ->getRepository('AcmeStoreBundle:Towar') 
   ->findBy(array(),array(),10,($current-1)*$numItemsPerPage);

Ответ 3

Вы можете использовать findBy третий и четвертый параметры метода репозитория доктрины, которые limit и offset.

Вот определение метода:

findBy( array $criteria, array $orderBy = null, integer|null $limit = null, integer|null $offset = null )

Источник: http://www.doctrine-project.org/api/orm/2.2/class-Doctrine.ORM.EntityRepository.html

Ответ 4

вы также можете использовать

$query- > getSingleResult();