Модели с двумя отношениями 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__$};'
)
);