Я попробовал решение в этом ответе , но это не сработало. Это привело к следующему SQL:
SELECT user.id AS `Id`, user.name AS `Name`, AS `ReferralUser.Id`, AS `ReferralUser.Name` FROM `ReferralUser` INNER JOIN `account` ON (ReferralUser.id=account.id)
Обратите внимание, что ReferralUser не является таблицей в моей базе данных, она должна быть псевдонимом.
Мне нужно присоединиться к таблице как минимум два раза, но, возможно, больше в будущем. Мой текущий код:
$q = \UserQuery::create(); $q->select(array('Id', 'Name', 'ReferralUserRelation.Id', 'ReferralUserRelation.Name', 'CreatorUserRelation.Id', 'CreatorUserRelation.Name')); $q->join('ReferralUserRelation'); $q->join('CreatorUserRelation'); $q->find();
Это приводит к следующему SQL:
SELECT user.id AS `Id`, user.name AS `Name`, user.id AS `ReferralUserRelation.Id`, user.name AS `ReferralUserRelation.Name`, `user.id` AS `CreatorUserRelation.Id`, `user.name` AS `CreatorUserRelation.Name` FROM `user` INNER JOIN `user` ON (user.id=user.referral_user_id) INNER JOIN `user` ON (user.id=user.creator_user_id)
Возможно ли это в Propel?
Я рекомендую использовать псевдонимы таблиц и API ActiveQuery (см. http://propelorm.org/reference/model-criteria.html#table-aliases). Например, если таблица User
имеет отношение Supervisor
к себе:
// Table aliases are mostly useful to join the current table, // or to handle multiple foreign keys on the same column $employee = EmployeeQuery::create('e') ->innerJoin('e.Supervisor s') ->where('s.Name = ?', 'John') ->find();