Запросы 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.Номера телефонов и адреса относятся к пользователю, а город относится к адресу.