2013-05-01 95 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