使用查询生成器创建子查询


Create subquery using query builder

我尝试转换SQL查询(工作良好)在学说查询生成器,但我没有成功,因为它包含一个子查询

这是我的SQL查询:
SELECT * 
FROM `navigation` 
WHERE `parent_id` = 
(
     SELECT `id` 
     FROM `navigation` 
     WHERE `parent_id` = 47 
     AND `nav_type`= 'nav'
     AND `published` = 1 
     AND `title` = 'Top'
)

这是我在我的Repository中尝试的:

class NavigationRepository extends EntityRepository
{
    public function test($parentId, $type, $status, $title)
    {
        $subQuery = $this->createQueryBuilder('n2')
            ->select('n2.id')
            ->where('n2.parent = :parent')
            ->andWhere('n2.type = :type')
            ->andWhere('n2.status = :status')
            ->andWhere('n2.title = :title')
            ->setParameter('parent', $parentId)
            ->setParameter('type', $type)
            ->setParameter('status', $status)
            ->setParameter('title', $title)
            ->getDQL();
        $qb = $this->createQueryBuilder('n');
        $qb
            ->where(
                $qb->expr()->eq('n.parent', '('.$subQuery.')')
            )
            ->getQuery()
            ->getResult();
        return $qb
            ->getQuery()
            ->getResult();
    }
}

但是我得到了这个错误:

QueryException: Invalid parameter number:绑定变量的个数与令牌数量不匹配

为什么?

您应该在$qb上调用setParameter()而不是$subQuery。DQL不包含插值参数,它只是一个常规字符串。