2011-12-27 10 views
0

내가 가진 M : 비디오 및 재생 목록 테이블 (playlist_has_video) 사이의 M 관계심포니와 교리 선택 쿼리가 작동하지 않습니다 제대로

예를 들어 나는 동일한 비디오를 재생 목록에 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)); 

내가 로그에 쿼리를 확인하고 OK :

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 개 결과 (동영상)

Doctrine 버전 : 1.2.3 Symfony 버전 : 1.4.8

누구든지 나를 도울 수 있습니까?

답변

1

VideoleftJoin을 사용하고있는 것이 문제입니다. ->groupBy('PHV.playlist_id')을 추가하고 ->from('PlaylistHasVideo PHV')을 설정할 수 있습니다.

phpMyAdmin과 같은 도구는 Doctrine과 같이 수화 작용을하지 않으므로 Doctrine이주는 결과 이외에 다른 결과를 볼 수 있습니다.

+0

작품을 설정하면 ('PlaylistHasVideo PHV'), 그렇지만 비디오 객체가 아닌 PlaylistHasVideo 객체를 반환합니다. 비디오 객체가 필요합니다 ... – trkich

+0

Doctrine 객체 수화가 "문제"라고 생각합니다 ... Doctrine :: HYDRATE_ARRAY를 실행할 때 좋은 결과를 얻습니다. – trkich

관련 문제