Модель CakePHP с несколькими внешними ключами - PullRequest
8 голосов
/ 22 мая 2011

В моем приложении CakePHP есть модели для матчей и команд.Каждый Матч имеет home_team_id и away_team_id, оба из которых относятся к разной Команде.

В моем файле team.php я могу сформировать отношения для домашних матчей Команды:

var $hasMany = array(
  'HomeMatch' => array('className' => 'Match', 'foreignKey' => 'home_team_id'),
  'AwayMatch' => array('className' => 'Match', 'foreignKey' => 'away_team_id')
);

Моя проблема в том, что я не могу автоматически получать домашние и выездные матчи команды в одном массиве.То есть извлеченные соответствия возвращаются в отдельных массивах HomeMatch и AwayMatch, что вызывает трудности сортировки.

Я пробовал следующее:

var $hasMany = array(
  'Match' => array('foreignKey' => array('home_team_id', 'away_team_id'))
);

... безуспешно.

Есть какие-нибудь идеи о том, как объединить эти два внешних ключа в одно отношение?

Спасибо, Бен

Ответы [ 3 ]

13 голосов
/ 22 мая 2011

Пользовательский поисковый запрос должен сделать свое дело:

public $hasMany = array(
    'Match' => array(
        'className'   => 'Match',
        'foreignKey'  => false,
        'finderQuery' => 'SELECT *
                            FROM `matches` as `Match`
                           WHERE `Match`.`home_team_id` = {$__cakeID__$}
                              OR `Match`.`away_team_id` = {$__cakeID__$}'
    )
);
8 голосов
/ 15 ноября 2012

У меня была похожая проблема, и вместо создания finderQuery я использовал оператор conditions, и он прекрасно работал!

public $hasMany = array(
    'Match' => array(
        'className'   => 'Match',
        'foreignKey'  => false,
        'conditions' => array(
            'OR' => array(
                array('Match.home_team_id' => '{$__cakeID__$}'),
                array('Match.away_team_id' => '{$__cakeID__$}')
            )
        ),
    )
);
0 голосов
/ 22 мая 2011

Они возвращаются в отдельных массивах, потому что представляет различных моделей (в данном конкретном случае модель одинакова).

Вам, вероятно, следует создать вспомогательный метод, чтобы просмотреть полученные данные (в объекте модели или в отдельном вспомогательном классе) и "сгладить" их. тогда вы сможете отсортировать его.

Кен.

...