por que não usar o comportamento contido
// you would probably want the next line in the app_model ot be able to use it with all models
$this->Post->actsAs = array('Containable')
$params['conditions'] = array(
);
$params['contain'] = array(
'Media' => array(
'fields' => array(
'type', 'path', 'title'
),
'limit' => 1
)
);
$this->Post->find('all', $params);
EDITAR:
Apenas tentei isso e obtive este sql (Módulo <-> Tag):
SELECT `Module`.`id` FROM `modules` AS `Module` WHERE 1 = 1
e
SELECT `Tag`.`id`, `ModulesTag`.`module_id`, `ModulesTag`.`tag_id`
FROM `tags` AS `Tag`
JOIN `modules_tags` AS `ModulesTag`
ON (`ModulesTag`.`module_id` IN (1, 2, 3, 4) AND `ModulesTag`.`tag_id` = `Tag`.`id`)
WHERE `Tag`.`belongs_to` = 'Module'
ORDER BY `Tag`.`name` ASC
LIMIT 1
obviamente, isso não pode retornar o resultado desejado, pois você teria que fazer uma consulta para cada resultado do Módulo (o que, novamente, resultaria em muitas consultas).
Como conclusão, eu retornaria todas as Tags (no meu exemplo), pois a sobrecarga em muitas linhas de resultados é melhor do que a sobrecarga de muitas consultas.