2012-01-22 81 views
2

我正在用CakePHP建立一個MMA(混合武術)網站。我在我的數據庫中有一個fights表,它有三列最簡單的列:id,fighter_afighter_b有兩個hasOne關係到同一表的模型

我很難找到我的頭模型將與我的Fighter模塊有什麼類型的關係。我是否正確地認爲fighter_afighter_b會是兩個hasOne的關係?

我想這與我的Fight模型如下:

<?php 
class Fight extends AppModel { 

    public $name = 'Fight'; 
    public $hasOne = array(
     'FighterA' => array(
      'className' => 'Fighter', 
      'foreignKey' => 'fighter_a' 
     ), 
     'FighterB' => array(
      'className' => 'Fighter', 
      'foreignKey' => 'fighter_b' 
     ) 
    ); 
} 

然後這在我的Fighter模型:

<?php 
class Fighter extends AppModel { 

    public $name = 'Fighter'; 
    public $hasMany = array(
     'Fight' 
    ); 
} 

但調用$this->Fight->findById($id)(當我的CakePHP應用這個扔了一個錯誤其中$id是戰鬥機的ID):

Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Fight.fighter_id' in 'field list'

我怎樣才能連接我的模型,以便我可以打電話給戰鬥機一直在打架的所有戰鬥?

+0

請問您的應用程序顯示了SQL調試?如果是這樣,你能否將相關查詢複製到你的問題上? 這可能是因爲你需要根據戰鬥機是否列爲戰鬥機B的戰鬥機A來定義你的hasMany's homeFight和awayFight。 – Joep

+0

當然。我認爲問題在於我想查詢它形成戰鬥機的時候。假設我正在展示Brock Lesnar的個人資料。我想顯示他的戰鬥歷史,所以任何記錄中他的ID值出現在'fights'表的'fighter_a_id'或'fighter_b_id'列中,按日期降序排列。 –

+0

這真的是一個沒有答案的東西(因爲它不能解決這個問題),但我會考慮只是爭取比戰鬥。換句話說:'$ this-> Fighter-> Fight-> find('all',array('conditions'=> array('OR'=> array('fighter_a_id'=> $ id,'fighter_b_id'= > $ id))))' – Joep

回答

1

從談話的問題下蒸餾,解決辦法是這樣的:

重寫$的hasMany在FighterModel的樣子:

public $hasMany = array(
     'Fight' => array(
     'className' => 'Fight', 
     'finderQuery' => 'SELECT * FROM fights AS Fight WHERE Fight.fighter_a_id = {$__cakeID__$} OR Fight.fighter_b_id = {$__cakeID__$};' 
    ) 
    ); 
+0

啊,是的!我記得有關這方面的東西。謝謝。我會試一試並報告它是如何發生的。 –

相關問題