我有两个实体,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
它会给我回电子邮件,这不是我想要的。
我是否只需要收回电子邮件,然后从中获取帐户?
答案 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
这将直接检索帐户对象。