と の 2 つのモデルがFight
ありFighter
ます。私のFight
モデルには 2 つの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'
)
);
}
これは、戦闘に参加する 2 人のファイターを設定できるようにするためです。しかし、私のFighter
モデルでは、関係の反対側を設定する方法を理解するのに苦労しています。
fighter_a_id
またはfighter_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
ます (時系列順ですが、この問題とは関係がないため、別の列で処理されます)。