2011-05-22 18 views
8

CakePHP uygulamasında Eşleşmeler ve Takımlar için modellerim var. Her bir Eşleşme, her ikisi de farklı bir Ekibe referans veren bir home_team_id ve bir away_team_id içerir.CakePHP Çoklu Yabancı Tuşlarla Model İlişkisi

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

Benim sorunum otomatik Ekibi'nin ev alamıyor olması ve uzağa tek dizide Maçlar: Benim team.php dosyasında

, bir takımın ana maçları için ilişkiyi oluşturmak mümkün. Yani, alınan eşleştirmeler, sıralama zorluklarına neden olan ayrı HomeMatch ve AwayMatch dizilerinde döndürülür.

Aşağıdaki denedim:

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

... hiç şansım.

Bu iki yabancı anahtarın nasıl tek bir ilişkide birleştirileceği hakkında herhangi bir fikir var mı?

sayesinde, Ben

cevap

13

Özel bir finderQuery hile yapmak gerekir:

I ve bunun yerine conditions operatörü kullanılır ve bir finderQuery yaratma benzer bir sorunu başlamıştı
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

Teşekkürler bu mükemmel! – Ben

+0

Bu harikaydı. –

0

tür (model aynıdır bu özel durumda) farklı modeller temsil çünkü ayrı dizi en döndürülür.

Elde edilen verileri (model nesnesinde veya ayrı bir yardımcı sınıfta) gözden geçirmek ve "düzleştirmek" için muhtemelen bir yardımcı yöntem oluşturmalısınız. o zaman onu sıralayabilirsin.

Ken.

8

harika çalıştı!

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__$}') 
      ) 
     ), 
    ) 
);