Запрос выбора Symfony и Doctrine работает неправильно - PullRequest
0 голосов
/ 27 декабря 2011

У меня есть отношение M: M между видео и таблицей списков воспроизведения (playlist_has_video)

Например, если я добавляю одно и то же видео 3 раза в список воспроизведения и когда я пытаюсь выбрать видео из этого списка воспроизведения, я получаю только один результат(видео), но мне нужно получить 3 результата (видео).

Мой запрос:

$q_videos = Doctrine_Query::create()
            ->select('V.*, PHV.*')
            ->distinct(FALSE)
            ->from('Video V')
            ->leftJoin('V.VideoSource VS')
            ->leftJoin('V.PlaylistHasVideo PHV')
            ->orderBy("PHV.position ASC")
            ->where('PHV.playlist_id = ? AND V.instance_id = ? AND VS.transcoded = ?', array($this->getObject()->getId(), sfContext::getInstance()->getUser()->getAttribute('instance_id'), 1));

Я проверяю запрос в журнале и все в порядке:

SELECT v.id AS v__id, v.published AS v__published, v.share AS v__share, v.public AS v__public, v.title AS v__title, v.description AS v__description, v.thumbnail AS v__thumbnail, v.subtitle AS v__subtitle, v.created_at AS v__created_at, v.updated_at AS v__updated_at, v.views AS v__views, v.highlighted AS v__highlighted, v.created_by AS v__created_by, v.updated_by AS v__updated_by, v.instance_id AS v__instance_id, p.id AS p__id, p.playlist_id AS p__playlist_id, p.video_id AS p__video_id, p.position AS p__position FROM video v LEFT JOIN video_source v2 ON v.id = v2.video_id LEFT JOIN playlist_has_video p ON v.id = p.video_id WHERE (p.playlist_id = '1' AND v.instance_id = '1' AND v2.transcoded = '1') ORDER BY p.position ASC

Когда выполнить этот запрос в phpMyAdmin, он даст мне хорошие результаты - 3 результата (видео)

Версия доктрины: 1.2.3 Версия Symfony: 1.4.8

Кто-нибудь может мне помочь?

1 Ответ

1 голос
/ 29 декабря 2011

Проблема в том, что вы используете leftJoin на Video.Вы можете добавить ->groupBy('PHV.playlist_id') и установить ->from('PlaylistHasVideo PHV').

Такие инструменты, как phpMyAdmin, не выполняют гидратацию, как это делает Doctrine, поэтому вы видите результаты, отличные от Doctrine.

...