Доктрина, не позволяющая ResultSetMappingBuilder работать

Я использую Symfony 2 с доктриной. Я создал настраиваемый репозиторий с пользовательской функцией поиска. Когда он присоединяется к подзапросу, я почти уверен в том, что прочитал, что мне нужно будет использовать ResultSetMappingBuilder, чтобы получить результаты обратно из запроса. Но я продолжаю получать следующую ошибку:

The column 'id' conflicts with another column in the mapper. 

Мой код:

  $sql ="SELECT c.id as cid, c.country, c.rank, c.continent, q.* FROM country c INNER JOIN ( SELECT d.* , MAX( d.rating ) AS maxrating FROM ducks d GROUP BY d.country_id )q ON ( q.country_id = c.id )"; $rsm = new \Doctrine\ORM\Query\ResultSetMappingBuilder($this->getEntityManager()); $rsm->addRootEntityFromClassMetadata('Wfuk\DuckBundle\Entity\Country', 'c', array('id' => 'cid')); $rsm->addJoinedEntityFromClassMetadata('Wfuk\DuckBundle\Entity\Ducks', 'ducks', 'c', 'country_id'); $query = $this->getEntityManager()->createNativeQuery($sql, $rsm); return $query->getResult(); 

SQL-запрос выполняется без проблем и возвращает результаты, которые я ожидал бы.

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

  $rsm->addJoinedEntityFromClassMetadata('Wfuk\DuckBundle\Entity\Ducks', 'ducks', 'c', 'country_id'); 

Я получаю следующую ошибку:

 Notice: Undefined index: country_id in E:\Documents\wfuk\Work\duck travels\wamp\vendor\doctrine\lib\Doctrine\ORM\Internal\Hydration\ObjectHydrator.php line 85 

Я почти уверен, что это последнее значение в вызове, country_id, но я не уверен на 100%, что это такое. Объяснение здесь: http://readthedocs.org/docs/doctrine-orm/en/latest/reference/native-sql.html не слишком понятно, и я не полностью понимаю описание из класса docblock.

Ошибка, которую он дает:

 The column 'id' conflicts with another column in the mapper. 

Тем не менее я переименовал поле id для одного из результатов, поэтому в результирующем наборе есть только один столбец с именем «id».

Стек-указатель на ошибке показывает, что он бросается сюда:

 at ResultSetMappingBuilder ->addAllClassFields ('Wfuk\DuckBundle\Entity\Ducks', 'q', array()) in E:\Documents\wfuk\Work\duck travels\wamp\vendor\doctrine\lib\Doctrine\ORM\Query\ResultSetMappingBuilder.php at line 71 

Я подозреваю, что это что-то очевидное, но нет никакой информации о документации по этой функции, которую я мог бы найти где угодно …

РЕШИТЬ:

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

Для тех, у кого такая же проблема, проблема связана с 4-м параметром, отправленным по этой строке:

 $rsm->addJoinedEntityFromClassMetadata('Wfuk\DuckBundle\Entity\Ducks', 'ducks', 'c', 'ducks'); 

Который должен был удерживать поле внутри класса Country, которое я использовал для хранения массива.

При создании ResultSetMappingBuilder укажите COLUMN_RENAMING_INCREMENT переименования COLUMN_RENAMING_INCREMENT для Doctrine для автоматического разрешения конфликтов

Затем в реальном запросе вам нужно использовать генератор select:

  $rsm = new ResultSetMappingBuilder( $entityManager, ResultSetMappingBuilder::COLUMN_RENAMING_INCREMENT ); $rsm->addRootEntityFromClassMetadata("Product", "p"); $rsm->addJoinedEntityFromClassMetadata("ProductImage", "pi", "p", "images"); $query = $entityManager->createNativeQuery(" SELECT " . $rsm->generateSelectClause() . " FROM product p JOIN product_image pi ", $rsm); 

Просто закрывая вопрос, как он решается:

Для тех, у кого такая же проблема, проблема связана с 4-м параметром, отправленным по этой строке:

 $rsm->addJoinedEntityFromClassMetadata('Wfuk\DuckBundle\Entity\Ducks', 'ducks', 'c', 'ducks'); 

Который должен был удерживать поле внутри класса Country, которое я использовал для хранения массива.