所以它很简单:我在一些实体中有以下代码
/**
* @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;
答案 0 :(得分:2)
没有。这是不可能的。你应该解决这个问题,创建一个dql。
OrderBy中的DQL代码段只允许由不合格的,不带引号的字段名称和可选的ASC / DESC位置语句组成。多个字段用逗号(,)分隔。 引用的字段名称必须存在于@ManyToMany或@OneToMany批注的targetEntity类。
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会懒惰地加载它。