0

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

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

我会通过帖子满足总评论的百分比。

我会在 cakephp 中的哪个位置执行此操作?我将在哪里计算帖子的评论数除以所有评论的总数?

4

1 回答 1

1

哪里:你在模型中做。这是很好的做法

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

  1. 使用虚拟字段。在你的模型中做类似的事情

    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);
    

    如果出于任何原因您希望每次调用 Post 时都获得此排名,那么在该post 的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功能。所以改变它以满足您的需求。

于 2013-05-02T13:28:48.893 回答