Doctrine orm 如何在DQL语句中引用联接表中的元素

Doctrine orm 如何在DQL语句中引用联接表中的元素,doctrine-orm,doctrine,dql,Doctrine Orm,Doctrine,Dql,我有两个实体(AdminMembers\Entity\Members和AdminEvents\Entity\investees),它们通过OneToMany关系连接在一起。因为关系是在实体中定义的,所以我可以使用以下DQL语句来查询数据: $dql = "SELECT i FROM AdminEvents\Entity\Invitees i WHERE i.eventID=$eventID"; 而且,通过这种配置,我可以在ZF2视图脚本中使用诸如$invitee->getMember()->g

我有两个实体(
AdminMembers\Entity\Members
AdminEvents\Entity\investees
),它们通过
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
这是因为
AdminMembers\Entity\Members
中定义了
memberLastName
memberFirstName
字段。虽然关联确实存在,但我确信我只是在引用
memberLastName
memberFirstName
时缺少了一些语法

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


在DQL语句中引用联接的表实体而不“重新联接”语句中的表是否有特殊语法?

您应该联接成员实体,以便能够按字段排序。见:


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


这似乎是答案。不过,这似乎违反直觉。在需要对数据进行排序之前,可以使用
$invites=$this->getEntityManager()->getRepository('AdminEvents\Entity\Invites')->findBy(array('eventID'=>$eventID')访问数据,表示条令已经加入实体。谢谢你,@Vera。你认为你能帮我解决这个问题吗:。这似乎是答案。不过,这似乎违反直觉。在需要对数据进行排序之前,可以使用
$invites=$this->getEntityManager()->getRepository('AdminEvents\Entity\Invites')->findBy(array('eventID'=>$eventID')访问数据,表示条令已经加入实体。谢谢你,@Vera。你认为你能帮我解决这个问题吗。
$dql = "SELECT i, m FROM AdminEvents\Entity\Invitees i JOIN i.member m WHERE i.eventID=$eventID ORDER BY m. memberLastName, m.memberFirstName";