Php 在zf2和Doctrine2中编写联接查询

Php 在zf2和Doctrine2中编写联接查询,php,sql,doctrine-orm,zend-framework2,Php,Sql,Doctrine Orm,Zend Framework2,我在zf2和orm中有一个查询。我通过主键将同一个表上两个查询的结果连接起来 看来,我犯了一个语法错误,无法找到答案 $query = $this->getEntityManager()->createQuery( "select tc_result1.id as id ,tc_result1.displayId as displayId,tc_result1.activeFlag,tc_result1.hash from (

我在zf2和orm中有一个查询。我通过主键将同一个表上两个查询的结果连接起来

看来,我犯了一个语法错误,无法找到答案

$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);
我得到了以下错误:

其他信息:条令\ORM\Query\QueryException文件: /var/www/testsuite/vendor/doctrine/orm/lib/doctrine/orm/Query/QueryException.php:63

信息:

[Semantical Error] line 0, col 153 near '(': Error: Class '(' is not defined.

我昨天就一个类似问题所作的回答也适用于这里:

你做错的是:定义ON子句。那个 这是您在SQL中的实现方式。然而,在DQL中,您定义了关系 在映射信息中的实体之间(通过注释, xml、yaml或php),在查询中使用这种关系。因此: 定义一对一、一对一、多对一或多对多关系,以及 在查询中使用它(因此不需要使用ON)

和相关(来自同一线程):

您不是在用DQL查询表,而是在查询实体!这个 实体(对象)形成一个网络,即对象图。你可以“走路” 那张图。查询中未定义关联(启用或禁用) 其中),但在映射中。这就是ORM的全部要点; 否则就没有必要使用它,你最好 使用SQL直接查询数据库


我昨天就一个类似问题所作的回答也适用于这里:

你做错的是:定义ON子句。那个 这是您在SQL中的实现方式。然而,在DQL中,您定义了关系 在映射信息中的实体之间(通过注释, xml、yaml或php),在查询中使用这种关系。因此: 定义一对一、一对一、多对一或多对多关系,以及 在查询中使用它(因此不需要使用ON)

和相关(来自同一线程):

您不是在用DQL查询表,而是在查询实体!这个 实体(对象)形成一个网络,即对象图。你可以“走路” 那张图。查询中未定义关联(启用或禁用) 其中),但在映射中。这就是ORM的全部要点; 否则就没有必要使用它,你最好 使用SQL直接查询数据库


我有问题。条令查询到实体类而不是表。它需要一个实体类

select tc_result1.id as id ,tc_result1.displayId as displayId,tc_result1.activeFlag,tc_result1.hash
                from
                (

这个问题的解决方案是使用对象,使用它我们可以用本机sql编写查询,并将结果映射到doctrine对象我解决了这个问题。条令查询到实体类而不是表。它需要一个实体类

select tc_result1.id as id ,tc_result1.displayId as displayId,tc_result1.activeFlag,tc_result1.hash
                from
                (
这个问题的解决方案是使用对象,使用它我们可以用原生sql编写查询并将结果映射到对象