查询生成器错误在doctrine symfony中使用where in

问题描述 投票:0回答:1

我有一个原始查询,我想转换成学说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

任何人都可以建议,在我做错的地方?

symfony doctrine-orm doctrine query-builder doctrine-query
1个回答
0
投票

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

$mainQuerySelect = $em->addSelect("count(t.id) as total_count")
                       ->from("(".$defaultSubSelect.")", 'AS t')->getQuery();
© www.soinside.com 2019 - 2024. All rights reserved.