と の 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組み合わせて、自動的に生成された (存在しない) をクエリしようとしています。WHEREOR
エラー: 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ます (時系列順ですが、この問題とは関係がないため、別の列で処理されます)。