我使用Symfony 2與原則。我使用自定義查找功能設置了自定義存儲庫。當它加入到一個子查詢中時,我確信從我讀過的內容中,我將需要使用ResultSetMappingBuilder從查詢中返回結果。不過,我不斷收到以下錯誤:不允許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,我已經通過重新映射在addRootEntityFromClassMetadata id字段固定的ID問題,但我還有經修訂的joinedEntity剩餘問題:
$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字段的結果之一,所以結果只設置了所謂的「身份證」一列。
上錯誤的堆棧跟蹤顯示它在這裏被拋出:
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小時的答案,所以要避免任何人浪費時間回答這個問題的答案是:
對於任何人誰具有同樣的問題,這個問題是與這條線發送的第四個參數:
$rsm->addJoinedEntityFromClassMetadata('Wfuk\DuckBundle\Entity\Ducks', 'ducks', 'c', 'ducks');
本應認爲,我用的是存儲內的鴨子ArrayCollection的國家類中的字段它。
我有同樣的問題,但不太理解你的答案。 – 2014-05-06 15:43:29
請改善答案,以便對他人有用。 – marcosdsanchez 2016-02-03 22:43:14