Модели с двумя отношениями hasOne к одной и той же таблице - PullRequest
2 голосов
/ 22 января 2012

Я создаю сайт 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 Ответ

1 голос
/ 23 января 2012

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

Перепишите $ 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__$};'
      )
   );
...