2013-05-01 60 views
0

我有一个基本的帖子和评论cakephp应用程序。Cakephp根据评论数量计算帖子的排名

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

我希望通过邮寄的方式征求总评论的百分比。

在cakephp中,我会这样做吗?我会在哪里按职位划分的评论数除以所有评论的总数?

回答

1

其中:你在模型中做它。那是good practice

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

  1. 使用Virtual Fields。在你的模型做这样的事情

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

    这将添加一个字段(虚拟的,是不是在DB)该模型的你做一个发现每次()

  2. 在模型中创建自己的功能调用它,只要你想

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

    你打电话从像找到控制器,功能()或保存()或任何其他

    $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功能。所以改变它以适应您的需求。

+0

感谢您的详细资料。对于分离模型和控制器功能以及使模型“胖”和控制器“瘦”,我有模糊的概念感。到目前为止,我所有的cakephp应用程序都有“胖”控制器和“瘦”模型。但是你的例子确实给了我更多关于什么可以进入模型的想法。谢谢。 – curtisp 2013-05-04 21:01:40

+0

它也发生在我身上。当我意识到我需要在任何地方重复相同的代码时,我才对“胖”模型有很好的理解。我想它与练习:) – Nunser 2013-05-06 13:03:08

+0

我喜欢重复代码的最小化(DRY =不要重复自己),这似乎是“胖”模型与“胖”控制器的真正目的。再次感谢! – curtisp 2013-05-08 01:32:50