通过Doctrine2 DQL中的ManyToOne关联选择实体

时间:2012-10-19 23:57:45

标签: php doctrine-orm

我有两个实体,UserAccount和UserEmail。 UserAccount与UserEmail具有OneToMany关联。我想要做的是选择具有给定电子邮件的UserAccount。

如何使用DQL生成类似以下SQL JOIN查询的内容:

SELECT a.* FROM user_account a
    INNER JOIN user_email e ON e.account_id = a.id
    WHERE e.address = 'someone@example.com'

如果我SELECT account, email FROM UserEmail email JOIN email.account account WHERE email.address = :email它会给我回电子邮件,这不是我想要的。

我是否只需要收回电子邮件,然后从中获取帐户?

1 个答案:

答案 0 :(得分:3)

这就是fetch-joining的全部内容:您的“电子邮件”对象包含此处的帐户。

SELECT e, a FROM UserEmail e JOIN e.account a WHERE e.address = :email

然后只需做

$account = $email->getAccount();

另一种方法是使用该电子邮件选择所有帐户:

SELECT a FROM UserAccount a JOIN a.emails e WHERE e.address = :email

这将直接检索帐户对象。