在Doctrine2查询中使用限制和偏移

我试图做分页,但有一个错误:

[语法错误]第0行,第57列:错误:预期的string结束,得到“限制”

我不太确定这是否是正确的语法(和逻辑),使我的查询:

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 ),但我只是想尝试如果查询工作,而事实并非如此。

不。 使用:

  return $this->getEntityManager() ->createQuery('...') ->setMaxResults(5) ->setFirstResult(10) ->getResult(); 
 $towary = $this->getDoctrine() ->getRepository('AcmeStoreBundle:Towar') ->findBy(array(),array(),10,($current-1)*$numItemsPerPage); 

你可以使用findBy库的方法的findBy第三和第四个参数,它们是limitoffset

这里是方法定义:

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

你也可以使用

$查询 – > getSingleResult();