我使用以下查询:
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。
你能否就如何做到这一点给我任何建议?
答案 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} // ...