如何按名称排序Doctrine对象?Symfony控制器实现方法
如何在Symfony控制器的listarAction中按文章名称排序文章列表
首先提个小细节:你当前的代码里有个语法小错误——方法开头多了一对冗余的大括号,记得先去掉哈。接下来咱们说核心需求:给查询到的文章按名称排序,这里有两种实用的实现方式,都能完美适配你用的KNP分页组件:
方法一:使用Repository的findBy快速实现
这种方式最简单直接,适合不需要复杂查询的场景:
public function listarAction(Request $request) { $em = $this->getDoctrine()->getManager(); // 用findBy方法,空数组表示查询所有数据,第二个参数指定排序规则 // 把`nombre`换成你实体类里实际的文章名称字段(比如`name`),ASC是升序,降序用DESC $articulos = $em->getRepository("BDBundle:Articulos")->findBy([], ['nombre' => 'ASC']); $paginator = $this->get('knp_paginator'); $pagination = $paginator->paginate( $articulos, $request->query->getInt('page', 1), 5 ); return $this->render('AppBundle:Default:productos_listar.html.twig', array( 'pagination' => $pagination )); }
方法二:用QueryBuilder构建查询(性能更优)
如果以后需要给查询加更多筛选条件,或者数据量比较大,推荐用这种方式——KNP分页可以直接处理Query对象,不用先把所有数据查出来,性能更好:
public function listarAction(Request $request) { $em = $this->getDoctrine()->getManager(); // 创建QueryBuilder,指定别名`a`,然后按名称字段排序 $query = $em->getRepository("BDBundle:Articulos") ->createQueryBuilder('a') ->orderBy('a.nombre', 'ASC') // 同样,替换成你实际的字段名 ->getQuery(); $paginator = $this->get('knp_paginator'); $pagination = $paginator->paginate( $query, $request->query->getInt('page', 1), 5 ); return $this->render('AppBundle:Default:productos_listar.html.twig', array( 'pagination' => $pagination )); }
记得根据你Articulos实体里的实际字段名替换代码中的nombre哦~
内容的提问来源于stack exchange,提问作者Xisco Sánchez
相关产品推荐
相关产品推荐

