0

私は投稿やいいねを持ったシステムを持っています(モデルと正しくリンクされています)。そして、私はトップのいいねされた投稿を取得したいと思います。

CakePHPのドキュメントを調べた後、1.2のドキュメントで何かを見つけました:counterCache。しかし、CakePHP2.xではもう動作しないようです。

だから、あなたはトップのいいねされた投稿を取得するための解決策がありますか?

テーブルは非常に基本的です:idとそれぞれのために作成され、いいねのためにpost_idとリンクされています、ここにlikesテーブルがあります:

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

2 に答える 2

0

投稿といいねの結合を強制し、いいねの数、カウンター、カウンターの降順、および上位の x をCOUNT()クエリGROUP BYORDER BYますLIMIT 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);
于 2012-10-02T14:00:35.207 に答える
0

これはCounterCacheを使用して実現できますが、HABTM を「hasMany から」に置き換えることを意味します。

次のようなものがあります。

<?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');
}
于 2012-10-09T04:43:10.317 に答える