Я создаю сайт MMA (смешанные боевые искусства) с CakePHP. У меня есть таблица fights
в моей базе данных, которая имеет простейшие три столбца: id
, fighter_a
и fighter_b
.Модели с двумя отношениями hasOne с тем же столом
У меня возникли проблемы с тем, что касается моей модели 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
был идентификатором истребителя):
Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Fight.fighter_id' in 'field list'
Как я могу связать свои модели, чтобы я мог назвать все бои, в которых был боец?
Проявляется ли ваше приложение в SQL отладке? Если да, не могли бы вы скопировать соответствующий запрос на свой вопрос? Возможно, вам необходимо определить ваш hasMany как homeFight и awayFight в зависимости от того, указан ли бойцов как Fighter A истребителя B. – Joep
Конечно. Я думаю, что проблема заключается в том, когда я хочу запросить его, создавая Fighter. Скажем, я показываю профиль Брок Леснар. Я хочу показать историю его боя, поэтому любые записи, где его значение ID появляется в столбце 'fighter_a_id' или' fighter_b_id' таблицы 'боев', упорядочивается по дате по убыванию. –
Это что-то вроде ответа не на самом деле (в том, что он не решает эту проблему), но я бы подумал только о том, чтобы получить Fights, чем. Другими словами: '$ this-> Fighter-> Fight-> find ('all', array ('conditions' => array ('OR' => array ('fighter_a_id' => $ id, 'fighter_b_id' = > $ id)))) ' – Joep