Doctrine não permite que ResultSetMappingBuilder funcione

Estou usando o Symfony 2 com doutrina. Eu configurei um repositório personalizado com uma função de localização personalizada. À medida que se junta a uma subconsulta, tenho certeza do que li que precisarei usar o ResultSetMappingBuilder para recuperar os resultados da consulta. Mas continuo recebendo o seguinte erro:

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

Meu código é:

    $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();

A consulta SQL é executada por si própria, sem problemas e retorna os resultados que eu esperari

UPDATE, eu corrigi o problema de identificação remapeando o campo de identificação no addRootEntityFromClassMetadata, mas ainda tenho um problema restante com o joinEntity revisado:

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

Estou tendo o erro a seguir

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

Tenho certeza de que esse é o último valor da chamada, country_id, mas não tenho 100% de certeza do que é isso. A explicação aqui:http: //readthedocs.org/docs/doctrine-orm/en/latest/reference/native-sql.htm não é muito claro e não entendo completamente a descrição da classe docbloc

O erro que dá é:

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

No entanto, renomeei o campo id para um dos resultados, portanto o conjunto de resultados possui apenas uma coluna chamada 'id'

O stacktrace no erro mostra que está sendo lançado aqui:

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

Suspeito que seja algo óbvio, mas não há muita documentação sobre essa função que eu possa encontrar em qualquer lugar ...

SOLVED:

Não posso adicionar isso como resposta por mais 5 horas; portanto, para evitar que alguém perca tempo respondendo a isso, a resposta é:

Para quem tem o mesmo problema, o problema foi com o quarto parâmetro enviado nesta linha:

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

Que deveria ter mantido o campo dentro da classe Country que eu estava usando para armazenar a arrayCollection de patos nela.

questionAnswers(4)

yourAnswerToTheQuestion