2013-04-24 2 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

Если вы правильно сопоставлена ​​OneToMany отношения вы не должны явно присоединиться с помощью столбцов, как:

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

, а скорее:

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

Можете ли вы показать нам свои объекты?

Кроме того, вы считали, что вместо этого использовали ->getResult() (объект гидратации)?

0

У меня была аналогичная проблема.

В моем случае есть дублированный идентификатор (это вид в db), поэтому, когда доктрина заполняет объекты, создается только один объект для каждой повторяющейся строки.

Я добавил отдельный объект для объекта ('entityAlias'), чтобы получить в обоих случаях один и тот же ответ.

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

Это исправить эту проблему для меня.

Смежные вопросы