我有两个模型:Fight
和Fighter
. 我的Fight
模型有两个belongsTo
关系:
<?php
class Fight extends AppModel {
public $belongsTo = array(
'FighterA' => array(
'className' => 'Fighter',
'joinTable' => 'fighters',
'foreignKey' => 'fighter_a_id'
),
'FighterB' => array(
'className' => 'Fighter',
'joinTable' => 'fighters',
'foreignKey' => 'fighter_b_id'
)
);
}
这样我就可以设置两个参与战斗的战士。但是,在我的Fighter
模型中,我很难确定如何设置关系的另一端。
我知道我想找到所有战斗,其中fighter_a_id
orfighter_b_id
列等于战斗机 ID,但在将其转换为模型中的关系时遇到了麻烦。
我试过了:
<?php
class Fighter extends AppModel {
public $hasMany = array(
'Fight' => array(
'conditions' => array(
'OR' => array(
'Fight.fighter_a_id' => 'Fighter.id',
'Fight.fighter_b_id' => 'Fighter.id'
)
)
)
);
}
但是 CakePHP 抛出一个错误,它仍然试图查询fighter_id
它自动生成的(不存在的),将生成WHERE
的子句与OR
我上面指定的子句结合起来。
错误:SQLSTATE [42S22]:找不到列:1054 '字段列表'中的未知列 'Fight.fighter_id'
以及生成的 SQL 语句:
SELECT Fight.id, Fight.fighter_a_id, Fight.fighter_b_id, Fight.event_id, Fight.weight_division_id, Fight.rounds, Fight.rounds_length, Fight.winner, Fight.winning_round, Fight.winning_time, Fight.win_method, Fight.fighter_id FROM fights AS Fight WHERE ((Fight.fighter_a_id = 'Fighter.id') OR (Fight.fighter_b_id = 'Fighter.id')) AND Fight.fighter_id = (1)
从fighters
表中查找记录时,我还想列出相关Fight
模型(按时间顺序,但在另一列中处理,因为它与此问题无关)。