我正在用CakePHP建立一个MMA(混合武术)网站。我在我的数据库中有一个fights
表,它有三列最简单的列:id
,fighter_a
和fighter_b
。有两个hasOne关系到同一表的模型
我很难找到我的头模型将与我的Fighter
模块有什么类型的关系。我是否正确地认为fighter_a
和fighter_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'
我怎样才能连接我的模型,以便我可以打电话给战斗机一直在打架的所有战斗?
请问您的应用程序显示了SQL调试?如果是这样,你能否将相关查询复制到你的问题上? 这可能是因为你需要根据战斗机是否列为战斗机B的战斗机A来定义你的hasMany's homeFight和awayFight。 – Joep
当然。我认为问题在于我想查询它形成战斗机的时候。假设我正在展示Brock Lesnar的个人资料。我想显示他的战斗历史,所以任何记录中他的ID值出现在'fights'表的'fighter_a_id'或'fighter_b_id'列中,按日期降序排列。 –
这真的是一个没有答案的东西(因为它不能解决这个问题),但我会考虑只是争取比战斗。换句话说:'$ this-> Fighter-> Fight-> find('all',array('conditions'=> array('OR'=> array('fighter_a_id'=> $ id,'fighter_b_id'= > $ id))))' – Joep