San*_*hal 8 php dql doctrine-orm
我可能忽略了一些非常简单的东西,只是盯着它看太多了,但我无法让这个DQL查询起作用.我得到一个例外说明:
Cannot select entity through identification variables without choosing at least one root entity alias.
Run Code Online (Sandbox Code Playgroud)
这是我的查询.用户与Group具有多对一关系.请注意,这是单向关系!这可能对你没有意义,但它在我们的域逻辑中是有意义的.
SELECT DISTINCT g
FROM Entity\User u
LEFT JOIN u.group g
WHERE u.active = :active
Run Code Online (Sandbox Code Playgroud)
你能告诉我这里缺少什么吗?
Fox*_*ion 15
由于这是搜索错误消息"无法通过...选择实体"时的第一个Google匹配,因此我决定回复,尽管该主题是在几个月前发布的.
诀窍是使用JOIN ... WITH ...(如SQL中的JOIN ... ON ...).
我收到了这段代码的消息:
SELECT ro, COUNT(ro)
FROM FH\MailerBundle\Entity\Recipient r
JOIN r.selectedOption ro
GROUP BY ro.id
Run Code Online (Sandbox Code Playgroud)
我用这段代码解决了这个问题:
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
Run Code Online (Sandbox Code Playgroud)
我需要为两个实体指定完整的命名空间和类.
你需要选择FROM root entity alias...意思是你不能只从你正在加入的表中选择SELECT ,就像在普通的sql中那样..所以这样的事情应该这样做:
SELECT DISTINCT g
FROM Entity\Group g
INNER JOIN g.user u
WHERE u.active = :active
Run Code Online (Sandbox Code Playgroud)
我通过做一个子选择来解决这个问题:
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
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13153 次 |
| 最近记录: |