Доктрина: Невозможно выбрать сущность через переменные идентификации, не выбрав хотя бы один псевдоним корневого объекта.
Я использую следующий код в построителе запросов, чтобы выбрать среднее значение оценок и сущность категории, к которой относится это среднее значение:
$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).
Есть идеи, что может быть не так?
1 ответ
createQueryBuilder() может принимать параметр только тогда, когда он вызывается из хранилища соответствующей сущности. Если вы не вызываете его из этого репозитория, вы должны определить метод from.
->from('YourMappingSpace:Campsite', 's')
В любом случае, передача параметра в createQueryBuilder() для удобства. Вы всегда можете определить это вручную. Функция выглядит так (только внутри хранилища сущностей):
public function createQueryBuilder($alias)
{
return $this->_em->createQueryBuilder()
->select($alias)
->from($this->_entityName, $alias);
}