2012-01-22 46 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

啊,是的!我记得有关这方面的东西。谢谢。我会试一试并报告它是如何发生的。 –

相关问题