Cakephp按评论数量计算帖子的排名

时间:2013-05-01 00:17:33

标签: cakephp cakephp-2.0

我有一个基本的帖子和评论cakephp应用程序。

我想显示一个表格,其中的列按照评论数量显示帖子的排名。

我会通过邮寄结束一定比例的评论。

我会在cakephp的哪个地方做这个?我会在哪里按帖子计算评论数除以所有评论的总数?

1 个答案:

答案 0 :(得分:1)

其中:您在模型中执行此操作。那是good practice

如何:我看到两种有效的方法(我的意思是,有很多替代品,但这些是最简单的,不要在任何地方重复代码)

  1. 使用Virtual Fields。在您的模型中执行类似

    的操作
    public $virtualFields = array(
        'rank' => '/*query*/'  //sql query that get's the number you want
    );
    

    每次执行该模型的find()时,都会添加一个字段(虚拟,不在数据库中)

  2. 在模型中创建自己的函数,并在需要时调用它

    public getRank($postID) {
        $post = $this->find('first', array('conditions'=>array('id'=>$postID);
        $rank = /*do the calculation you want*/
        return $rank;
    }
    

    您可以从控制器调用该函数,例如find()或save()或任何其他

    $this->Post->getRank($id);
    

    如果出于任何原因,您希望每次等级,请拨打帖子,然后在该帖子的afterFind()方法中添加对该功能的调用:

    public afterFind(array $results, boolean $primary = false) {
          parent::afterFind($results, $primary);
          foreach ($results as $i=>$result) {
               $results[$i]['rank'] = $this->getRank($result['id']);
          }
          return $results;
    }
    

    我没有测试 afterFind 功能。因此,改变它以满足您的需求。