Доктрина не позволяет работать 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 выполняется сам по себе без каких-либо проблем и возвращает ожидаемые результаты.

ОБНОВЛЕНИЕ. Я исправил проблему с идентификатором, переназначив поле идентификатора в метаданных addRootEntityFromClassMetadata, но у меня все еще остается проблема с исправленным соединениемEntity:

    $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 не слишком понятно, и я не совсем понимаю описание из докблок класса.

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

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, которое я использовал для хранения массива уток внутри него.

6
задан j0k 20 September 2012 в 12:05
поделиться