2012-11-12 2 views
1

Doctrine 1.2를 사용하는 레거시 시스템으로 작업하고 있습니다. 같은 (Doctrine의 중첩 된 조건문 1.2

SELECT DISTINCT u.* 
FROM Users AS u 
INNER JOIN Workplaces AS w ON u.workplaceId = w.id 
INNER JOIN Municipalities AS m ON u.municipalityId = m.id 
INNER JOIN Prefectures AS p ON m.prefectureId = p.id 
INNER JOIN Regions AS r ON p.regionId = p.regionId 
WHERE (
    (w.shortName = 'ES' AND m.id IN (:esMunicipalityIdArray)) 
    OR 
    (w.shortName = 'JHS' AND m.id IN (:jhsMunicipalityIdArray)) 
    OR 
    (w.shortName = 'ES' AND p.id IN (:esPrefectureIdArray)) 
    OR 
    (w.shortName = 'JHS' AND p.id IN (:jhsPrefectureIDArray)) 
    OR 
    (w.shortName = 'ES' AND r.id IN (:esRegionIdArray)) 
    OR 
    (w.shortName = 'JHS' AND r.id IN (:jhsRegionIdArray)) 
) 

기본적으로, 여기에 목표는 지방 자치 단체, 도도부 현에있는 사용자의 모든 이름 (이메일 주소)를 얻을 수 있습니다 :이 같은 것을 보면 여러 중첩 된 조건 쿼리를 만들려고 해요 주 또는 지방) 또는 지역. 사용자는 여러 현을 포함하는 지역의 모든 사용자 또는 현 내의 모든 사용자 또는 선택된 시정촌의 사용자를 선택할 수 있습니다. 그렇게하면 사용자에게 보낸 특정 전자 메일을받는 사람을 누가 미세 조정할 수 있습니다. 예, 이것은 다소 세분화 된 것입니다. 그렇습니다. 과잉 일 수 있습니다.하지만 이봐, 나는 도전을 좋아합니다.

어쨌든 Doctrine 1.2에서 어떻게해야합니까? 그런 중첩 된 문장이나 문장을 어떻게 만들지 모르겠습니다. DQL을 사용하여

답변

1

, 아래의 문장은 다음과 같습니다

$query = Doctrine_Query::create() 
     ->distinct(true) 
     ->from("Users u") 
     ->innerJoin("u.Workplaces w on u.workplaceId = w.id) 
     ->innerJoin("u.Municipalities m on u.workplaceId = m.id) 
     ->innerJoin("m.Prefectures p on m.workplaceId = p.id) 
     ->innerJoin("p.Regions r on p.workplaceId = r.id) 
     ->Where("w.shortName = 'ES' and m.id in ($esMunicipalityIdArray)) 
     ->orWhere("w.shortName = 'JHS' and m.id in ($jhsMunicipalityIdArray)) 
     ->orWhere("w.shortName = 'ES' and p.id in ($esPrefectureIdArray)) 
     ->orWhere("w.shortName = 'JHS' and p.id in ($jhsPrefectureIdArray)) 
     ->orWhere("w.shortName = 'ES' and r.id in ($esRegionIdArray)) 
     ->orWhere("w.shortName = 'JHS' and r.id in ($jhsRegionIdArray)); 
+0

아름답게했다. 나는 DQL을 그런 식으로 사용할 수 있는지 몰랐다. 나는 각 문장을 분리해야한다고 생각했다. 감사! – blainarmstrong