Как использовать innerJoin с doctrine1.2? - PullRequest
0 голосов
/ 24 декабря 2010

У меня есть код (работает):

$q = Doctrine_Query::create()
     ->from('UsersProjects up')
     ->innerJoin('up.Users u');

Два вопроса:

  1. Может кто-нибудь показать мне пример, как присоединиться к следующей таблице (более одной)? Документация Доктрины содержит только основные примеры ...: - (

  2. Могу ли я использовать innerJoin() с любой таблицей из моей базы данных (например, типы пользователей, связанные с пользователями) или только с таблицей, связанной с UsersProjects (в данном случае: проекты и пользователи)? Когда я пытаюсь это сделать, я получаю сообщение об ошибке «Неизвестное отношение».

1 Ответ

4 голосов
/ 03 июня 2011

Запросы Doctrine используют «свободный» интерфейс, что означает, что каждый метод возвращает ссылку на запрос, так что вы можете продолжать цепочку новых методов (select (), innerJoin (), from (), where () и т. Д.),Вы можете добавить столько внутренних соединений, сколько хотите, но присоединенный объект / таблица должны быть связаны с одним из тех, к которым вы уже присоединились (или основанием из таблицы).Например:

$q = Doctrine_Query::create() 
  ->from('UsersProjects up') 
  ->innerJoin('up.Users u')
  ->innerJoin('u.PhoneNumbers p') // users may have multiple phone numbers
  ->innerJoin('u.Addresses a') // users may have multiple addresses
  ->innerJoin('a.City c'); // each address has a city

Нельзя объединять несвязанные таблицы, не входя в интерфейс RawSql, который обеспечивает доктрина.Вы можете видеть, что только пользователи относятся к базовой таблице UsersProjects.Номера телефонов и адреса относятся к пользователю, а город относится к адресу.

...