Ваш лучший вариант выглядит как контейнерное поведение CakePHP http://book.cakephp.org/view/474/Containable
Это позволяет вам ограничить связанные данные модели, которые возвращаются - в основном это рекурсивная способность 2 в том, чтобы находить глубокие ассоциации данных, но имеет гораздо лучшую производительность и чище, потому что дает вам только те данные, которые вам нужны .
Что-то вроде следующего кода должно возвращать данные города в данных пользователя, включая условие event_id.
$this->Agenda->find('all', array(
'contain' => array(
'User' => array(
'City'
),
),
'conditions' => array(
'Agenda.event_id' => $event_id
)
));
Просто для завершения этого фрагмента кода, убедитесь, что var $actsAs = array('Containable');
находится вверху модели (или в app_model.php, если вы хотите, чтобы встраиваемое поведение было доступно для всех моделей)