查询构建器在学说符合中使用的错误使用位置



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

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('AppBundleEntityContentItemContentItem', '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('AppBundleEntityContentItemContentItemLanguages', '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();

这是我遇到的错误

[DoctrineORMQueryQueryException] [Syntax Error] line 0, col 13: Error: Expected Literal, got '*'

[DoctrineORMQueryQueryException]
    SELECT count(*) as total_count FROM (SELECT * FROM 
    AppBundleEntityContentItemContentItemLanguages cl
       WHERE (
          cl.defaultContentItemId IN (SELECT c.id AS defaultContentItemId 
           FROM AppBundleEntityContentItemContentItem c WHERE 
                c.contentType = 1 AND 
                c.isTranslated = 0 AND
                c.modifiedOn >= :timeperiod AND c.isActive = :status)) 
       AND cl.languageId = :language) AS t

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

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

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

相关内容

  • 没有找到相关文章

最新更新