Доктрина 1.2: присоединение userprofile к городу и городу к стране в DQL - PullRequest
0 голосов
/ 16 декабря 2011

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

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

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

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

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

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

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

Если у вас есть «чистое» решение, я буду очень рад его узнать!

спасибо

Сандрино

1 Ответ

0 голосов
/ 21 декабря 2011

Я нашел решение, оно было простым, но в прошлом оно не работало, потому что мой 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');
...