我有一个基本的帖子和评论cakephp应用程序。
我想显示一个表格,其中的列按照评论数量显示帖子的排名。
我会通过邮寄结束一定比例的评论。
我会在cakephp的哪个地方做这个?我会在哪里按帖子计算评论数除以所有评论的总数?
答案 0 :(得分:1)
其中:您在模型中执行此操作。那是good practice。
如何:我看到两种有效的方法(我的意思是,有很多替代品,但这些是最简单的,不要在任何地方重复代码)
使用Virtual Fields。在您的模型中执行类似
的操作public $virtualFields = array(
'rank' => '/*query*/' //sql query that get's the number you want
);
每次执行该模型的find()时,都会添加一个字段(虚拟,不在数据库中)
在模型中创建自己的函数,并在需要时调用它
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 功能。因此,改变它以满足您的需求。