【问题标题】:Doctrine 2 pagination教义2分页
【发布时间】:2014-09-10 08:29:24
【问题描述】:

我使用以下查询:

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 分页器、symfony 2 和教义 ORM。

你能给我一些关于如何做到这一点的建议吗?

【问题讨论】:

标签: php mysql symfony doctrine-orm pagination


【解决方案1】:

https://github.com/doctrine/doctrine2/issues/2596#issuecomment-162359725 提供了一个合理的解决方案,正如上面的@gabriel 所述。爱荷华州:

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

【讨论】:

    【解决方案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,
        );
    

    应该在分页器中传递整个对象'us​​er'而不是属性(user.username ..) ..

    【讨论】:

    • 然后你应该传递整个 'user' 或 'shop' 对象作为分页参数,然后在 twig 中获取相关属性值,请参阅我的更新答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-18
    • 2012-09-28
    • 2023-03-19
    • 2012-01-17
    • 2012-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多