如何在DQL语句中引用连接表中的元素

jcr*_*opp 0 doctrine dql doctrine-orm

我有两个与关系连接的实体(AdminMembers\Entity\MembersAdminEvents\Entity\Invitees)OneToMany.因为关系是在实体中定义的,所以我可以使用以下DQL语句来查询数据:

$dql = "SELECT i FROM AdminEvents\Entity\Invitees i WHERE i.eventID=$eventID";
Run Code Online (Sandbox Code Playgroud)

并且,通过这种配置,我可以使用像$invitee->getMember()->getMemberLastName()我的ZF2视图脚本中的语句来从连接的实体中获取数据.

现在,如果我想按字段对DQL语句中的数据进行排序AdminMembers\Entity\Members,我遇到了问题.以下声明

$dql = "SELECT i FROM AdminEvents\Entity\Invitees i WHERE i.eventID=$eventID ORDER BY i.memberLastName, i.memberFirstName";
Run Code Online (Sandbox Code Playgroud)

抛出错误消息

Class AdminEvents\Entity\Invitees has no field or association named memberLastName
Run Code Online (Sandbox Code Playgroud)

这是因为字段memberLastNamememberFirstName定义AdminMembers\Entity\Members.虽然关联确实存在,但我确定我只是缺少引用memberLastName和语法中的一些语法memberFirstName.

我知道我可以扩展DQL语句以加入DQL语句中的实体,这将允许我识别连接表并将元素与表标识符相关联.但是,由于表已经在实体定义中加入,因此不必再次连接它们.

是否有一种特殊的语法用于在DQL语句中引用连接表实体而不"重新加入"语句中的表?

Ver*_*era 5

您应该加入成员实体,以便能够按其字段进行排序.查看文档:

$dql = "SELECT i, m FROM AdminEvents\Entity\Invitees i JOIN i.member m WHERE i.eventID=$eventID ORDER BY m. memberLastName, m.memberFirstName";
Run Code Online (Sandbox Code Playgroud)