Cakephp 获得最受欢迎的帖子
我有一个帖子和喜欢的系统(与模型正确链接)。我想得到最受欢迎的帖子 在查看CakePHP的文档后,我在1.2文档中发现了一些东西:Cakephp 获得最受欢迎的帖子,cakephp,Cakephp,我有一个帖子和喜欢的系统(与模型正确链接)。我想得到最受欢迎的帖子 在查看CakePHP的文档后,我在1.2文档中发现了一些东西:counterCache。但是,它似乎不再适用于CakePHP2.x 那么,你有没有办法获得最受欢迎的帖子 这些表是非常基本的:id,为每个表创建,并与喜欢的post_id链接,下面是likes表: ======================================== || *id* | created | post_id | user_id || ===
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”)
对最喜欢的帖子进行排序。:/yourlikes
表看起来像id,喜欢的数量,帖子id
对吗?每个帖子都有一个或者属于类似的对吗?您可以通过like
模型关联访问post信息。找到最喜欢的like
记录(order by number of\u like
),这是您的post\u id
。从您的post\u id
cake将自动检索相关的post
信息。不,我用likes
表编辑了我的帖子。