我有两个以AdminMembers\Entity\Members
关系加入的实体(AdminEvents\Entity\Invitees
和OneToMany
)。因为关系是在实体中定义的,所以我可以使用以下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
这是因为字段memberLastName
和memberFirstName
在AdminMembers\Entity\Members
中定义。虽然存在关联,但我确定在引用memberLastName
和memberFirstName
时我缺少一些语法。
我知道我可以扩展DQL语句以加入DQL语句中的实体,这将允许我识别连接表并将元素与表标识符相关联。但是,由于表已经在实体定义中加入,因此不必再次连接它们。
是否有一种特殊的语法用于在DQL语句中引用连接表实体,而不会重新加入"重新加入"声明中的表格?
答案 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";