首页 > 解决方案 > 带有 getDQL 的 Symfony 子查询抛出错误

问题描述

我正在尝试转换以下查询

SELECT * FROM (SELECT * FROM table_name d WHERE d.number != '' ORDER BY d.stop_time DESC ) AS p GROUP BY p.number

使用 symfony 查询构建器如下 =>

$sub = $this->entityManager->createQueryBuilder();
$sub->select('d')
  ->from($this->entityManager->getClassMetadata($entityClass)->getName(), 'd')
  ->where("d.number != ''")
  ->orderBy('d.time', 'DESC');

  $qb = $this->entityManager->createQueryBuilder();
  $qb->select('p')
    ->from($sub->getDQL(),'p')
    ->groupBy('p.number');

我得到以下错误=>

[Syntax Error] line 0, col 14: Error: Expected Doctrine\ORM\Query\Lexer::T_ALIASED_NAME, got 'SELECT'

如果有任何问题,请更正查询。

标签: phpmysqlsymfonysymfony4query-builder

解决方案


这里是答案

$sub = $this->entityManager->createQueryBuilder();
$sub->select('d.id')
  ->from($this->entityManager->getClassMetadata($entityClass)->getName(), 'd')
  ->where("d.number != ''")
  ->orderBy('d.time', 'DESC');

  $qb = $this->entityManager->createQueryBuilder();
  $qb->select('p')
    ->from($this->entityManager->getClassMetadata($entityClass)->getName(), 'p')
->where("p.id IN (".$sub->getDQL().")")
    ->groupBy('p.number');

推荐阅读