教义2分页

时间:2014-07-19 07:32:42

标签: php mysql symfony doctrine-orm pagination

我使用以下查询:

SELECT u.username, u.password, s.name, s.price
FROM AcmeBundle:User u
LEFT JOIN AcmeBundle:Shop s
WITH u.id = s.id;

显示我想要分页的记录。问题是分页需要简单的计数查询,而不适用于像这样的选择。

Not all identifier properties can be found in the ResultSetMapping: username

因此,为了对其进行分页,我必须始终使用两个查询 - 上面的一个用于显示记录,另一个用于计算它们,两个都带有连接。它大大降低了性能。

我使用knplabs paginator,symfony 2和doctrine ORM。

你能否就如何做到这一点给我任何建议?

2 个答案:

答案 0 :(得分:2)

应该是

  $dql = 'SELECT user
         FROM AcmeBundle:User user
         LEFT JOIN AcmeBundle:Shop shop
         WITH user.id = shop.id';
  $query = $em->createQuery($dql);
  $paginator  = $this->get('knp_paginator');
  $pagination = $paginator->paginate(
        $query,
        $this->get('request')->query->get('page', 1)/*page number*/,
        10/*limit per page*/
    );
  return array(
        'pagination' => $pagination,
    );

整个对象'用户'而不是属性(user.username ..)应该在paginator中传递..

答案 1 :(得分:0)

https://github.com/doctrine/doctrine2/issues/2596#issuecomment-162359725提供了一个合理的解决方案,正如@gabriel在上面指出的那样。 IOW:

SELECT PARTIAL u.{username, password, name, price} // ...