在Doctrine2查询中使用Limit和Offset



我正在尝试分页,但出现了一个错误:

[语法错误]第0行,第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();
}

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

我知道这很愚蠢,甚至是错误的(尤其是第三个参数$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第三和第四参数,即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

Doctrine2.6偶然发现了这篇旧帖子,并尝试了DQL方法,但它不符合目的。因此,如果您想避免使用DQL,因为您已经将实体映射并连接在一起,那么可以使用匹配&标准

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

您也可以使用

$query->getSingleResult();

相关内容

  • 没有找到相关文章

最新更新