Cakephp 获得最受欢迎的帖子

Cakephp 获得最受欢迎的帖子,cakephp,Cakephp,我有一个帖子和喜欢的系统(与模型正确链接)。我想得到最受欢迎的帖子 在查看CakePHP的文档后,我在1.2文档中发现了一些东西:counterCache。但是,它似乎不再适用于CakePHP2.x 那么,你有没有办法获得最受欢迎的帖子 这些表是非常基本的:id,为每个表创建,并与喜欢的post_id链接,下面是likes表: ======================================== || *id* | created | post_id | user_id || ===

我有一个帖子和喜欢的系统(与模型正确链接)。我想得到最受欢迎的帖子

在查看CakePHP的文档后,我在1.2文档中发现了一些东西:
counterCache
。但是,它似乎不再适用于CakePHP2.x

那么,你有没有办法获得最受欢迎的帖子

这些表是非常基本的:id,为每个表创建,并与喜欢的post_id链接,下面是
likes
表:

========================================
|| *id* | created | post_id | user_id ||
========================================

在帖子和喜欢上强制连接,并查询喜欢的
COUNT()
分组依据
计数器,
排序依据
计数器降序,以及
限制x
顶部x

试一试,我假设名为
Post
Like
的模型和联接表:

$options = array();
$options['joins'][] = array('table' => 'likes_posts', 'alias' => 'LikePost', 'conditions' => array('LikePost.post_id = Post.id'));
$options['joins'][] = array('table' => 'likes', 'alias' => 'Like', 'conditions' => array('LikePost.like_id = Like.id'));
$options['fields']  = array('COUNT(Like.id) AS counter', 'Post.*');
$options['group']   = 'Like.id';
$options['limit']   = 1; //you could easily get the top 3, top 5, top 10...
$options['order']   = 'counter DESC';
$data = $this->Post->find('all', $options);
$this->set('data', $data);

您可以使用,但这意味着将HABTM替换为“”

你会有这样的想法:

<?php
class Post extends AppModel {
    public $hasMany = array('Like');
    // Note that the "posts" table must have a "like_count" integer field
}
class Like extends AppModel {
    public $belongsTo = array(
        'User',
        'Post' => array('counterCache' => true)
    );
}
class User extends AppModel {
    public $hasMany = array('Like');
}

计数器缓存仍处于2.0版本-请参阅。但这可能不适合你;您的桌子是如何设置的/您需要处理哪些数据。难道你就不能用适当的递归级别找到('all')
并按
Likes
排序吗。但是,我真的不知道如何用
find(“all”)
对最喜欢的帖子进行排序。:/your
likes
表看起来像
id,喜欢的数量,帖子id
对吗?每个
帖子都有一个
或者
属于
类似的
对吗?您可以通过
like
模型关联访问post信息。找到最喜欢的
like
记录(
order by number of\u like
),这是您的
post\u id
。从您的
post\u id
cake将自动检索相关的
post
信息。不,我用
likes
表编辑了我的帖子。