我可能忽略了一些非常简单的东西,只是盯着它看得太多了,但我无法让这个 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
你能告诉我我在这里错过了什么吗?
由于这是搜索错误消息"无法通过...选择实体"时的第一个Google匹配项,因此尽管该主题已在几个月前发布,但我还是决定做出回应。
诀窍是使用加入...跟。。。(如加入...上。。。在 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
)
我遇到了类似的问题,并通过多次from
调用解决了它,如下所示:
$this->getDoctrine()->createQueryBuilder()
->from('ProjectMainBundle:Group', 'g')
->from('ProjectMainBundle:User', 'u')
->select('distinct(g)')
->where('u.group = g')
->andWhere('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
我用这个
$qb = $this->createQueryBuilder('o')
->select('DISTINCT IDENTITY(o.user)')