2013-04-24 74 views
3

只需要加入一個成員,首先上傳到他的畫廊圖片,但由於我是symfony的新手,因此遇到很大問題。getResult返回另一個結果,而不是SQL查詢Symfony2

表:

CREATE TABLE `member` (
`member_id` int(10) NOT NULL AUTO_INCREMENT, 
`name` varchar(256) COLLATE utf8_unicode_ci NOT NULL, 
PRIMARY KEY (`member_id`) 
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

CREATE TABLE `image` (
`image_id` int(10) NOT NULL AUTO_INCREMENT, 
`member_id` int(10) NOT NULL, 
`path` varchar(256) COLLATE utf8_unicode_ci NOT NULL, 
PRIMARY KEY (`image_id`), 
KEY `image_member_id_idx` (`member_id`), 
CONSTRAINT `image_member_id` FOREIGN KEY (`member_id`) REFERENCES `member` (`member_id`)    ON DELETE CASCADE 
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

操作:

$items = $this->getDoctrine() 
       ->getManager() 
       ->getRepository('AcmeMyBundle:Member') 
       ->createQueryBuilder('m') 
       ->select('m','i') 
       ->leftJoin('Acme\MyBundle\Entity\Image', 'i', 'WITH','i.memberId = m.memberId') 
       ->addGroupBy('m.memberId') 
       ->setMaxResults(10) 
       ->getQuery() 
       ->getArrayResult(); 

返回2倍以上,然後在數據庫中,而不是限制的記錄和分組設置 當我剛打印它->getQuery->getSQL()返回

SELECT m0_.member_id AS member_id0, 
m0_.name AS name1, 
i1_.image_id AS image_id2, 
i1_.path AS path3, 
i1_.member_id AS member_id4 
FROM member m0_ 
LEFT JOIN image i1_ 
ON (i1_.member_id = m0_.member_id) 
GROUP BY m0_.member_id LIMIT 10 

並且此查詢返回righ t直接從數據庫執行它的答案。 我需要幫助哪裏出錯?

回答

0

如果你已經正確映射一對多關係,你不應該明確地加入使用像列:

->leftJoin('Acme\MyBundle\Entity\Image', 'i', 'WITH','i.memberId = m.memberId') 

而是:

->leftJoin('Acme\MyBundle\Entity\Image', 'i') 

你能告訴我們你的實體?

此外,你有沒有考慮使用->getResult()(對象水合),而不是?

0

我有類似的問題。

在我的情況下,有重複的ID(是在數據庫中的視圖),所以當教條填充對象時,只爲每個重複的行創建一個對象。

我已經添加了一個獨特的目標實體('entityAlias')在兩種情況下獲得相同的響應。

$queryBuilder = $this->createQueryBuilder('entityAlias'); $queryBuilder->leftJoin(...) ->distinct('entityAlias');

即解決這個問題對我來說。