Модели с двумя отношениями hasOne к одной и той же таблице

Я создаю веб-сайт MMA (смешанные боевые искусства) с CakePHP. у меня есть 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'
    );
}

Но это вызвало ошибку в моем приложении CakePHP при вызове $this->Fight->findById($id) (где $id был удостоверение личности бойца):

Ошибка: SQLSTATE [42S22]: столбец не найден: 1054 Неизвестный столбец 'Fight.fighter_id' в 'списке полей'

Как я могу связать свои модели, чтобы я мог назвать все бои, в которых участвовал боец?

1 ответ

Отогнанный от разговора по вопросу, решение будет таким:

Перепишите $hasMany в FighterModel, чтобы он выглядел следующим образом:

   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__$};'
      )
   );
Другие вопросы по тегам