CakePHP имеет counterCache функциональность для этой конкретной цели.
Убедитесь, что ваша таблица сообщений содержит поле 'comment_count'.
Затем добавьте ключ counterCache в настройки модели Comment для публикации.
// app/models/comment.php
var $belongsTo = array(
'Post' => array(
'counterCache' => true
)
);
CakePHP теперь будет автоматически увеличивать / уменьшать поле Post.comment_count при каждом добавлении или удалении комментария, принадлежащего этому сообщению.
Чтобы получить 10 самых комментируемых сообщений:
// app/models/post.php
function getTopCommentedPosts($limit = 10) {
return $this->find('all', array(
'order' => 'Post.comment_count DESC',
'limit' => $limit
));
}
Затем вызовите этот метод из любого действия контроллера, для которого требуются эти данные. Если из контроллера, отличного от PostsController, используйте:
$this->set('posts', ClassRegistry::init('Post')->getTopCommentedPosts());