doctrine-orm - Doctrine :如果不选择至少一个根实体别名,则无法通过标识变量选择实体

标签 doctrine-orm doctrine doctrine-query

我在查询构建器中使用以下代码,以选择得分值的平均值以及该平均值所属的类别实体:

$queryBuilder = $this->createQueryBuilder('s')
    ->resetDQLPart('select')
    ->select('AVG(s.score) as score, partial c.{reviewCategoryID} as cat')
    ->setParameter('status', ReviewStatusType::ACCEPTED)
    ->join('s.review', 'r')
    ->join('s.category', 'c')
    ->where('r.campsite = :campsite')
    ->andWhere('r.status = :status')
    ->setParameter('campsite', $campsite)
    ->groupBy('c.reviewCategoryID');
$campsite是评论所属的实体,而分数属于评论,并且分数具有类别。

但是当我尝试执行此操作时,出现错误
Error: Cannot select entity through identification variables without choosing at least one root entity alias.

当我调试并检查根别名时,我看到定义了“s”,它应该是根实体(Score)。

知道有什么问题吗?

最佳答案

仅当从匹配实体的存储库中调用参数时,createQueryBuilder()才能采用该参数。如果您不从此存储库调用它,则应定义一个from方法。

->from('YourMappingSpace:Campsite', 's')

无论如何,将参数传递给createQueryBuilder()都是为了方便。您始终可以手动定义它。该函数如下所示(仅在实体存储库内部):
public function createQueryBuilder($alias)
{
    return $this->_em->createQueryBuilder()
        ->select($alias)
        ->from($this->_entityName, $alias);
}

关于doctrine-orm - Doctrine :如果不选择至少一个根实体别名,则无法通过标识变量选择实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17878237/

相关文章:

symfony 4 : An exception occurred in driver: could not find driver

php - 尝试模拟 Doctrine 2 实体存储库时在 PHPUnit 中出现错误

php - 默认情况下将 propel 设置为日期格式 getDate ("Y-m-d"),以便更好地与 zend toArray() 一起使用

php - Symfony2 Doctrine Querybuilder 全选

mysql - 返回关系的整个列表匹配的所有行(而不是任意组合)

php - Symfony2 Doctrine - WHERE IN 成对

php - 使用 insert() 方法通过 PHP Doctrine\DBAL 2 插入 DateTime 值

doctrine-orm - 带有连接表的 Doctrine 2 ManyToOne

php - 带有别名的 SUM() 字段上的 Doctrine orderBy

php - 学说注释类型 ="guid"和策略 ="UUID"行为?