在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
第三和第四个参数,它们是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
你也可以使用
$查询 – > getSingleResult();