2011-05-22 104 views
8

在我的CakePHP應用程序中,我有匹配和團隊的模型。每場比賽都有一個home_team_id和一個away_team_id,兩者都引用不同的球隊。CakePHP模型與多個外鍵的關係

在我team.php文件,我能形成一支球隊的主場比賽的關係:

var $hasMany = array(
    'HomeMatch' => array('className' => 'Match', 'foreignKey' => 'home_team_id'), 
    'AwayMatch' => array('className' => 'Match', 'foreignKey' => 'away_team_id') 
); 

我的問題是,我不能自動檢索球隊的主客場在一個陣列相匹配。也就是說,檢索到的匹配會返回到單獨的HomeMatch和AwayMatch數組中,這會導致排序困難。

我曾嘗試以下:

var $hasMany = array(
    'Match' => array('foreignKey' => array('home_team_id', 'away_team_id')) 
); 

...沒有運氣。

有關如何將這兩個外鍵合併爲一個關係的任何想法?

謝謝,本

回答

13

定製finderQuery應該做的伎倆:

public $hasMany = array(
    'Match' => array(
     'className' => 'Match', 
     'foreignKey' => false, 
     'finderQuery' => 'SELECT * 
          FROM `matches` as `Match` 
          WHERE `Match`.`home_team_id` = {$__cakeID__$} 
           OR `Match`.`away_team_id` = {$__cakeID__$}' 
    ) 
); 
+0

謝謝你的完美! – Ben 2011-05-22 20:58:49

+0

這真棒。 – 2011-06-01 05:48:34

0

他們是在單獨的磁盤陣列的返回,因爲那種代表不同的模型(在此特定情況下,模型是一樣的)。

你應該建立一個幫助器方法來檢查檢索到的數據(在模型對象中或在一個單獨的輔助類中)並將其「變平」。那麼你就可以對其進行分類。

Ken。

8

我有一個類似的問題,而不是創建一個finderQuery我用conditions運營商和它的工作太棒了!

public $hasMany = array(
    'Match' => array(
     'className' => 'Match', 
     'foreignKey' => false, 
     'conditions' => array(
      'OR' => array(
       array('Match.home_team_id' => '{$__cakeID__$}'), 
       array('Match.away_team_id' => '{$__cakeID__$}') 
      ) 
     ), 
    ) 
);