Доктрина 1.2: присоединение профиля пользователя к городу и города к стране в DQL

Я использую Doctrine 1.2 с Symfony 1.4 для написания запросов. Я понял принципы DQL, и у меня есть несколько запросов, которые отлично работают. Но для некоторых нужд я не нахожу решения в DQL и вместо этого использую SQL.

Вот простой пример: предположим, что у вас есть в вашем schema.yml класс sfguarduserprofile с отношением к классу города (используя city_id в профиле). И что у вас есть связь между классом города и классом страны (используя country_id в классе города).

Я просто пытаюсь написать DQL-запрос, чтобы получить профиль пользователя с названием города и названием страны. кажется довольно простым?

Да, но я не нашел «чистого» решения в DQL, потому что у меня нет прямого псевдонима или связи между профилем sfguarduserprofile и классом страны.

Я мог бы создать прямую связь между моим профилем пользователя sfguard и классом моей страны, но я больше не буду уважать передовой опыт моделирования (MERISE).

Я мог бы использовать select из моего класса City и получить профиль пользователя и страну (City имеет отношения с этими двумя таблицами), но я не могу использовать это решение, потому что у меня есть другие соединения из моего sfguarduserprofile.

В SQL это очень просто, но я хотел бы использовать объекты доктрины.

Если у вас есть "чистое" решение, я буду очень рад узнать об этом!

Спасибо

Сандрино


person Community    schedule 16.12.2011    source источник


Ответы (1)


Я нашел решение, оно было простым, но в прошлом оно не работало, потому что мой schema.yml не был оптимизирован для Doctrine. Вот пример рабочего запроса:

 $q = Doctrine_Query::create()
        ->select('p.user_id, u.username, c.name, co.name')
        ->from('sfGuardUserProfile p')
        ->leftJoin('p.User u')
        ->leftJoin('p.City c')
        ->leftJoin('c.Country co')
        ->orderBy('p.user_id');
person Community    schedule 21.12.2011