我正在研究一个Symfony2项目,我决定使用KNPPaginatorBundle构建一个简单的分页系统.所以我创建了一个Product实体,我想将paginator添加到indexAction动作(由CRUD命令生成).
// Retrieving products.
$em = $this->getDoctrine()->getManager();
//$entities = $em->getRepository('LiveDataShopBundle:Product')->findAll();
$dql = "SELECT a FROM LiveDataShopBundle:Product a";
$entities = $em->createQuery($dql);
// Creating pagnination
$paginator = $this->get('knp_paginator');
$pagination = $paginator->paginate(
$entities,
$this->get('request')->query->get('page', 1),
20
);
Run Code Online (Sandbox Code Playgroud)
它工作正常,但我想使用产品的存储库,而不是直接在控制器中创建查询.我怎样才能做到这一点 ?实际上,直接将结果集合添加到paginate对象的速度太慢,因为它加载所有产品然后对ArrayCollection进行分页.
提前致谢.
K4
用例:我想将搜索查询和结果总数存储到数据库中,这样我就可以看到人们正在搜索的内容在我的应用程序中不存在。
\n\n什么是有效的:我能够获取并存储查询,但我不知道如何获取搜索结果的总数。
\n\n这是来自控制器的代码示例。当我当前尝试此操作时,我得到以下信息
\n\n\n\n\n错误:可捕获的致命错误:类对象\n Knp\\Bundle\\PaginatorBundle\\Pagination\\SlidingPagination 无法\n 转换为字符串
\n
我尝试通过请求 $pagination[totalCount] 将 $pagination 像数组一样处理,但只是返回 null。
\n\n public function fpcAction(Request $request)\n {\n\n $query = dump($request->query->get(\'q\'));\n\n $finder = $this->container->get(\'fos_elastica.finder.app.product\');\n $page = $request->query->getInt(\'page\', 1);\n\n $paginator = $this->get(\'knp_paginator\');\n $results = $finder->createPaginatorAdapter($query);\n $pagination = $paginator->paginate($results, $page, 12);\n\n\n\n $searchmetrics = new SearchTerms();\n $searchmetrics->setSearchterm($query);\n $searchmetrics->setDate(time());\n\n // TODO: Need to get the total qty of search results for this specific query\n $searchmetrics->setResultsqty($pagination);\n\n $entityManager = $this->getDoctrine()->getManager();\n $entityManager->persist($searchmetrics);\n $entityManager->flush();\n\n\n return $this->render(\'default/search.html.twig\', [\'searchresults\' => $pagination, …Run Code Online (Sandbox Code Playgroud)