我可能忽视的东西很简单,只是它一直盯着太多了,但我不能得到这个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
你能告诉我什么,我在这里失踪?
由于这是第一款谷歌匹配的错误信息进行搜索时“无法选择通过实体...”,我决定,尽管这个专题是几个月前发布的回应。
诀窍是使用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
我需要指定完整的命名空间和类两个实体。
您需要选择从root entity alias
..这意味着你不仅可以从你加入桌子上的选择,你可以在普通的SQL ..所以这样的事情应该这样做:
SELECT DISTINCT g
FROM Entity\Group g
INNER JOIN g.user u
WHERE u.active = :active
我工作围绕这个问题做一个子查询:
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
)
您可以使用DQL的新WITH关键字做到这一点:
SELECT DISTINCT g
FROM Entity\User u
LEFT JOIN Entity\Group g
WITH u in g.users
WHERE u.active = :active
我有一个类似的问题,并解决它由多个来自这样的线路:
$this->getDoctrine()->createQueryBuilder()
->from('ProjectMainBundle:Group', 'g')
->from('ProjectMainBundle:User', 'u')
->select('distinct(g)')
->where('u.group = g')
->andWhere('u.active = :active')
->....
她的
我用这个
$qb = $this->createQueryBuilder('o')
->select('DISTINCT IDENTITY(o.user)')