Ваш вопрос немного сбивает с толку в конце, вы пытаетесь просто создать 2 отношения из запланированного события и пользователей (событие с конкурентом и противником)?Если это так, это может быть достигнуто путем расширения ваших отношений в модели расписания с внешними ключами.
Вместо сказать:
var $hasMany = array('Competitor');
Вы можете развернуть и установить внешний ключ и имя таблицы:
var $hasMany = array(
'Competitor' => array(
'className' => 'Competitor',
'foreignKey' => 'competitor_id'
),
'Opponent' => array(
'className' => 'Competitor',
'foreignKey' => 'opponent_id'
)
);
Это установит 2 отношения к одной и той же модели, и вы можете сохранить их отдельно. Дальнейшее чтение.