学说查询不同的相关实体(Doctrine query distinct related entity

2019-07-29 00:55发布

我可能忽视的东西很简单,只是它一直盯着太多了,但我不能得到这个DQL查询工作。 我得到一个异常说明:

Cannot select entity through identification variables without choosing at least one root entity alias.

这是我的查询。 用户拥有多到一个关系到组。 请注意,这是一个单向的关系! 这可能是没有意义的给你,但它是有道理的在我们的领域逻辑。

SELECT DISTINCT g
FROM Entity\User u
LEFT JOIN u.group g
WHERE u.active = :active

你能告诉我什么,我在这里失踪?

Answer 1:

由于这是第一款谷歌匹配的错误信息进行搜索时“无法选择通过实体...”,我决定,尽管这个专题是几个月前发布的回应。

诀窍是使用JOIN ... WITH ...(如JOIN ... ON ...在SQL)。

我是有此代码的消息:

SELECT ro, COUNT(ro)
FROM FH\MailerBundle\Entity\Recipient r
JOIN r.selectedOption ro
GROUP BY ro.id

我解决了这个代码的问题:

SELECT ro, COUNT(ro)
FROM FH\MailerBundle\Entity\RecipientOption AS ro
JOIN FH\MailerBundle\Entity\Recipient AS r WITH r.selectedOption = ro
GROUP BY ro.id

我需要指定完整的命名空间和类两个实体。



Answer 2:

您需要选择从root entity alias ..这意味着你不仅可以从你加入桌子上的选择,你可以在普通的SQL ..所以这样的事情应该这样做:

SELECT DISTINCT g
FROM Entity\Group g
INNER JOIN g.user u
WHERE u.active = :active


Answer 3:

我工作围绕这个问题做一个子查询:

SELECT g
FROM Entity\Group
WHERE g.id IN (
    SELECT DISTINCT g2.id
    FROM Entity\User u
    LEFT JOIN u.group g2
    WHERE u.active = :active
)


Answer 4:

您可以使用DQL的新WITH关键字做到这一点:

SELECT DISTINCT g
FROM Entity\User u
LEFT JOIN Entity\Group g
WITH u in g.users
WHERE u.active = :active


Answer 5:

我有一个类似的问题,并解决它由多个来自这样的线路:

$this->getDoctrine()->createQueryBuilder()
    ->from('ProjectMainBundle:Group', 'g')
    ->from('ProjectMainBundle:User', 'u')
    ->select('distinct(g)')
    ->where('u.group = g')
    ->andWhere('u.active = :active')
    ->....

她的



Answer 6:

我用这个

$qb = $this->createQueryBuilder('o')
           ->select('DISTINCT IDENTITY(o.user)')


文章来源: Doctrine query distinct related entity