1

Doctrine1.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でこれを行うにはどうすればよいですか?そのようなネストされたステートメントやステートメントを実行する方法がわかりません。

4

1 に答える 1

1

DQLを使用すると、次のステートメントは次のようになります。

$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));
于 2013-01-25T19:46:10.547 に答える