通过注释对象字段的Doctrine ORM顺序

时间:2016-12-13 16:43:43

标签: symfony orm doctrine-orm annotations

所以它很简单:我在一些实体中有以下代码

     /**
     * @var ServiceOffer
     *
     * @ORM\OneToMany(targetEntity="ServiceOffer", mappedBy="serviceProvider")
     * @ORM\OrderBy({"service" = "desc"})
     */
    private $offers;

我需要的是做这样的事情

     /**
     * @var ServiceOffer
     *
     * @ORM\OneToMany(targetEntity="ServiceOffer", mappedBy="serviceProvider")
     * @ORM\OrderBy({"service.points" = "desc"})
     */
    private $offers;

这是行不通的我不希望通过一些我希望直接注释的功能来实现它有没有办法做到这一点?

这是点btw:

    /**
     * @var integer
     *
     * @ORM\Column(name="points", type="integer", nullable=true)
     */
    private $points;

1 个答案:

答案 0 :(得分:2)

没有。这是不可能的。你应该解决这个问题,创建一个dql。

  

OrderBy中的DQL代码段只允许由不合格的,不带引号的字段名称和可选的ASC / DESC位置语句组成。多个字段用逗号(,)分隔。 引用的字段名称必须存在于@ManyToMany或@OneToMany批注的targetEntity类

更多doctrine2 documentation

DQL示例

SELECT provider, offer, service
  FROM \MyNamespace\Entity\ServiceProvider provider
  INNER JOIN provider.offers offer
  INNER JOIN offer.service service
WHERE 
  provider.id = 1

请注意,此代码段provider, offer, service在此处返回您需要的所有实体或字段非常重要,因此如果可能的话,该原则会将其加载一次。换句话说,如果你没有包含任何实体并且要求它,那么doctrine会懒惰地加载它。