65

我正在尝试进行分页,但出现错误:

[语法错误] 第 0 行,第 57 列:错误:预期的字符串结尾,得到“限制”

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

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();
}

Friends和users关联manyToOne和oneToMany,所以在friends表中有一个字段——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); 

我知道这很愚蠢甚至是错误的(尤其是第三个参数 be $page*$FR_PER_PAGE),但我只是想尝试一下查询是否有效,但它没有。

4

5 回答 5

154

没有。利用:

  return $this->getEntityManager()
        ->createQuery('...')
        ->setMaxResults(5)
        ->setFirstResult(10)
        ->getResult();
于 2012-08-30T13:38:29.180 回答
35
$towary = $this->getDoctrine()
   ->getRepository('AcmeStoreBundle:Towar') 
   ->findBy(array(),array(),10,($current-1)*$numItemsPerPage);
于 2013-11-02T19:19:01.610 回答
22

您可以使用findBy理论存储库方法的第 3 个和第 4 个参数,它们是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

于 2015-12-22T17:12:26.350 回答
1

你也可以使用

$query->getSingleResult();

于 2014-11-12T10:14:32.123 回答
0

Doctrine2.6, stumbled upon this old post and tried the DQL way but it did not fit for purpose. So if you want to avoid using DQL because you already have Entities mapped and joined together, you can do paging using matching & Criteria

$criteria = Criteria::create()
            ->setMaxResults($limit ? $limit : null)
            ->setFirstResult($offset ? $offset : null)
$result = $em->getRepository('EMMyFriendsBundle:Friend')
            ->matching($criteria)->toArray();

于 2020-10-17T21:24:53.690 回答