【问题标题】:Symfony3 QueryBuilder orderBy entity fieldSymfony3 QueryBuilder orderBy 实体字段
【发布时间】:2017-05-17 11:34:55
【问题描述】:

我正在使用 querybuilder 将查询构建为 EntityRepository。我有一个 ManyToOne 关系(通过 ID),我试图通过关系的值对查询进行排序。代码如下:sn-ps。

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 实体中的“名称”字段进行排序?就像现在一样,它是按 ID 排序的。

谢谢, 问候。

【问题讨论】:

  • 尝试在ContratoRepository 中发出join 请求以检索Contrato AND Proc 实体的数据。然后在您的 queryBuilder 请求中,您将拥有类似 ->orderBy('p.name','ASC'); 的内容,其中 p 代表您的 Proc 实体。
  • 谢谢 Grechka 解决了我的问题。

标签: symfony doctrine-orm query-builder


【解决方案1】:

根据学说文档应该可以: 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。

对于没有注释的使用,只需加入关系并添加手动 orderBy 就像 Grechka 提到的那样。

【讨论】:

  • 很好,从来不知道有排序注释:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-13
  • 1970-01-01
  • 2017-07-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多