我正在与CakePHP建立一个MMA(混合武术)网站。我的数据库中有一个fights
表,最简单的有三列:id
,fighter_a
和fighter_b
。
我无法理解我的Fight
模型与我的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):
错误: SQLSTATE [42S22]:未找到列:1054'字段列表'中的未知列'Fight.fighter_id'
如何链接我的模型以便我可以召唤战斗机所有的战斗?
答案 0 :(得分:1)
根据问题从对话中退出,解决方案将是:
在您的FighterModel中重写$ hasMany,如下所示:
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__$};'
)
);