2

我有两个实体,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,它会给我回电子邮件,这不是我真正想要的。

我只需要取回电子邮件然后从中获取帐户吗?

4

1 回答 1

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

这将直接检索帐户对象。

于 2013-02-23T22:33:07.890 回答