2014-03-05 78 views
0

我試過this answer的解決方案,但它沒有奏效。它導致以下SQL:如何在Propel中多次加入表格本身?

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) 

在行走這甚至可能嗎?

回答

1

我建議使用表別名和ActiveQuery API(請參閱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();