Подтвердить что ты не робот

Доктрина: невозможно выбрать сущность с помощью идентификационных переменных, не выбирая хотя бы один псевдоним корневого объекта

Я использую следующий код в построителе запросов, чтобы выбрать среднее значение оценки и объект категории, к которому относится это среднее значение:

$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).

Любая идея, что может быть неправильным?

4b9b3361

Ответ 1

createQueryBuilder() может принимать только параметр, когда он вызывается из репозитория соответствующего объекта. Если вы не вызываете его из этого репозитория, вы должны определить метод from.

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

Передача параметра createQueryBuilder() для удобства в любом случае. Вы всегда можете определить его вручную. Функция выглядит так (только внутри репозитория объектов):

public function createQueryBuilder($alias)
{
    return $this->_em->createQueryBuilder()
        ->select($alias)
        ->from($this->_entityName, $alias);
}