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

时间:2014-06-10 23:08:22

标签: doctrine-orm doctrine dql

我有两个以AdminMembers\Entity\Members关系加入的实体(AdminEvents\Entity\InviteesOneToMany)。因为关系是在实体中定义的,所以我可以使用以下DQL语句来查询数据:

$dql = "SELECT i FROM AdminEvents\Entity\Invitees i WHERE i.eventID=$eventID";

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

现在,如果我想按AdminMembers\Entity\Members中的字段对DQL语句中的数据进行排序,则会遇到问题。以下陈述

$dql = "SELECT i FROM AdminEvents\Entity\Invitees i WHERE i.eventID=$eventID ORDER BY i.memberLastName, i.memberFirstName";

抛出错误消息

Class AdminEvents\Entity\Invitees has no field or association named memberLastName

这是因为字段memberLastNamememberFirstNameAdminMembers\Entity\Members中定义。虽然存在关联,但我确定在引用memberLastNamememberFirstName时我缺少一些语法。

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

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

1 个答案:

答案 0 :(得分:5)

您应该加入成员实体,以便能够按其字段进行排序。见docs

$dql = "SELECT i, m FROM AdminEvents\Entity\Invitees i JOIN i.member m WHERE i.eventID=$eventID ORDER BY m. memberLastName, m.memberFirstName";