Вы можете сделать это, используя COunterCache ... единственное, вы должны определить отдельные отношения принадлежности для каждого действия. Прежде всего позвольте мне сказать, что это не лучший способ решить эту проблему на практике, но только потому, что вы спросили:
var $belongsTo = array(
'UserWalk' => array(
'counterCache' => true,
'foreignKey' => 'user_id',
'className' => 'User',
'conditions' => array('Activity.type' => 'walk'),
'counterScope' => array('Activity.type' => 'walk')
),
'UserRun' => array(
'counterCache' => true,
'foreignKey' => 'user_id',
'className' => 'User',
'conditions' => array('Activity.type' => 'run'),
'counterScope' => array('Activity.type' => 'run')
),
);
После этого Cake будет искать поле Count для каждой связанной модели. Имена полей для counterChache теперь должны выглядеть примерно так: user_run_count или userrun_count (я не знаю соглашения для этого)