我在zf2和doctrine orm中有一个查询。我正在通过其primary_key在同一个表上加入两个查询的结果。
看来,我正在制作语法错误而无法找到答案。
$query = $this->getEntityManager()->createQuery(
"select tc_result1.id as id ,tc_result1.displayId as displayId,tc_result1.activeFlag,tc_result1.hash
from
(
SELECT *
FROM (
SELECT id, display_id,active_flag,hash
FROM Test\Entity\TestCase tc_inner1
where tc_inner1.activeFlag=0 and tc_inner1.product = :productId
ORDER BY tc_inner1.displayId DESC
) a
GROUP BY hash
) AS tc_result1
join
(
SELECT *
FROM (
SELECT id, displayId,activeFlag,hash
FROM Test\Entity\TestCase tc_inner2
where tc_inner2.activeFlag=0 and tc_inner2.product = :productId
ORDER BY tc_inner2.displayId DESC
) a
GROUP BY hash
) AS tc_result2
on
tc_result1.id = tc_result2.id"
);
$query->setParameter("productId", $productId);
我收到了以下错误:
其他信息:Doctrine \ ORM \ Query \ QueryException文件: /var/www/test-suite/vendor/doctrine/orm/lib/Doctrine/ORM/Query/QueryException.php:63
消息:
[Semantical Error] line 0, col 153 near '(': Error: Class '(' is not defined.
答案 0 :(得分:3)
我昨天在doctrine-user mailinglist上给出类似问题的答案也适用于此:
你在做什么错误这里是:定义一个ON子句。那 是你如何在SQL中做到这一点。但是在DQL中,您可以定义关系 在映射信息中的实体之间(通过注释, xml,yaml或php)并在查询中使用该关系。所以: 定义OneToOne,OneToMany,ManyToOne或ManyToMany关系和 在查询中使用它(因此不需要使用ON)。
相关(来自同一个主题):
你不是用DQL查询表,而是查询实体!该 实体(对象)形成一个网络,即对象图。你能走” 那个图。查询中未定义关联(使用ON或 在哪里),但在映射。这是ORM的重点; 否则没有必要使用它,你可以更好 用SQL直接查询数据库。
答案 1 :(得分:1)
我遇到了问题。 Doctrine查询Entity类而不是表。它需要一个实体类
select tc_result1.id as id ,tc_result1.displayId as displayId,tc_result1.activeFlag,tc_result1.hash
from
(
此问题的解决方案是使用 ResultSetMappingBuilder 对象,使用该对象我们可以在本机sql中编写查询并将结果映射到doctrine对象