不幸的是,ManyToOne
关系不支持OrderBy属性。有没有一种方法可以实现自定义属性?类似于Attributes方法?
我已经尝试过SQLFilter,但事实证明,它不适用于ORDER BY语句。
我也在使用API平台。
编辑:在Companies.应用程序上实现OrderBy
#[ORM\OrderBy(['candidate.firstName' => 'DESC'])]
#[Groups(['opening:read'])]
#[ORM\OneToMany(mappedBy: 'job', targetEntity: Application::class)]
private Collection $applications;
应用程序实体具有此属性
#[ORM\ManyToOne(inversedBy: 'applications')]
#[ORM\JoinColumn(nullable: false)]
private ?User $candidate = null;
返回一个错误Warning: Undefined array key \"candidate.firstName\"
,并基于此原则文档
引用的字段名称必须存在于#[ManyToMany]或#[OneToMany]属性的targetEntity类中。
1条答案
按热度按时间1zmg4dgp1#
doctrine docs很清楚,正如你自己所指出的,这是不可能做到的。也许用一些花哨的AST沃克,但我不建议这样做。
OrderBy中的DQL嗅探器只允许由非限定的、未加引号的字段名称和可选的ASC/DESC位置语句组成。多个字段由逗号(,)分隔。引用的字段名称必须存在于#[ManyToMany]或#[OneToMany]属性的targetEntity类中。
您可以稍微反规范化您的Application实体,并在该特定实体上添加
$firstName
属性,该属性在创建/更新实体时从User
实体复制该值。然后,您可以将
Company
实体重写为:但是,使用反规范化步骤确实是一种偏好,对某些人来说也可能不是一种更好的方法。