Symfony3 QueryBuilder orderBy实体字段

时间:2017-05-17 11:34:55

标签: symfony doctrine-orm query-builder

我正在使用querybuilder构建一个EntityRepository查询。我有一个ManyToOne关系(通过ID)我试图通过关系的值来命令查询。代码片段如下。

namespace AppBundle\Entity\Repository;
class ContratoRepository extends EntityRepository
{

    public function getWithoutParams($ops)
    {

        $query=$this->createQueryBuilder('e')
            ->orderBy('e.proc','ASC');
        return $query->getQuery()->getResult();
    }

现在我的实体

namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="AppBundle\Entity\Repository\ContratoRepository")
 */

    class Contrato
    {
...
     /**
         * @ORM\ManyToOne(targetEntity="AppBundle\Entity\ContratosAdmin\Proc")
         * @ORM\JoinColumn(name="id_proc", referencedColumnName="id_proc")
         * @ORM\OrderBy({"name" = "ASC"})
         **/
        private $proc;

现在我的问题是,是否可以通过我的Proc Entity中的“name”字段进行排序?就像现在一样,它按照它的顺序排序。

谢谢你, 问候。

1 个答案:

答案 0 :(得分:2)

根据学说文档应该是可能的: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/tutorials/ordered-associations.html

但根据这一点,您将不得不稍微调整您的查询,否则orderBy Annotation将不会包含在查询中。

尝试此查询:

public function getWithoutParams($ops)
    {
        $query=$this->createQueryBuilder('e')
               ->select('e, p')
               ->leftJoin('e.proc', 'p');

        return $query->getQuery()->getResult();
    }

根据文档,在这种情况下应该自动添加orderBy。

对于没有Annotation的用途,只需加入关系并添加手动命令,如Grechka所述。