使用where中的教义共生查询生成器错误

时间:2019-03-14 06:54:17

标签: symfony doctrine-orm doctrine query-builder doctrine-query

我有一个原始查询,我想将其转换为准则ORM。基本上,这是一个包含子查询以计算总数的查询。

SELECT Count(*) AS total_count 
FROM   (SELECT * 
        FROM   content_item_languages 
        WHERE  default_content_item_id IN (SELECT id AS default_content_item_id 
               FROM   content_item 
               WHERE  content_type = 1 
                      AND is_translated = 0 
                      AND modified_on >= 
                          '$timePeriodStart' 
                      AND is_active = 1) 
           AND language_id = '$language') AS t 

我已经写了以下ORM准则,但是仍然出现错误

$em = $this->getEntityManager()->createQueryBuilder();

$totalPostSubselect = $em->addSelect('c.id AS defaultContentItemId')
                    ->from('AppBundle\Entity\ContentItem\ContentItem', 'c')
                    ->andWhere('c.contentType = 1')
                    ->andWhere('c.isTranslated = 0')
                    ->andWhere('c.modifiedOn >= :timeperiod')
                    ->andWhere('c.isActive = :status') 
                    ->setParameter('status', 1)
                    ->setParameter('timeperiod', $timePeriodStart)->getDQL();

 $em = $this->getEntityManager()->createQueryBuilder(); 

 $defaultSubSelect = $em->addSelect(['*'])
                    ->from('AppBundle\Entity\ContentItem\ContentItemLanguages', 'cl')
                    ->andWhere("cl.defaultContentItemId IN ($totalPostSubselect)")
                    ->andWhere('cl.languageId = :language')
                    ->setParameter('subSelect', $totalPostSubselect)
                    ->setParameter('language', $language)->getDQL();



 $em = $this->getEntityManager()->createQueryBuilder();


 $mainQuerySelect = $em->addSelect(["count(*) as total_count"])
                       ->from("(".$defaultSubSelect.")", 'AS t')->getQuery();

 return $mainQuerySelect->getResult();

这是我遇到的错误

[Doctrine\ORM\Query\QueryException] [Syntax Error] line 0, col 13: Error: Expected Literal, got '*'


[Doctrine\ORM\Query\QueryException]
    SELECT count(*) as total_count FROM (SELECT * FROM 
    AppBundle\Entity\ContentItem\ContentItemLanguages cl
       WHERE (
          cl.defaultContentItemId IN (SELECT c.id AS defaultContentItemId 
           FROM AppBundle\Entity\ContentItem\ContentItem c WHERE 
                c.contentType = 1 AND 
                c.isTranslated = 0 AND
                c.modifiedOn >= :timeperiod AND c.isActive = :status)) 
       AND cl.languageId = :language) AS t

有人能建议我到底在哪里做错了吗?

1 个答案:

答案 0 :(得分:0)

在学说查询语言中,您不能SELECT *,而必须处理对象。例如:

$mainQuerySelect = $em->addSelect("count(t.id) as total_count")
                       ->from("(".$defaultSubSelect.")", 'AS t')->getQuery();