我有一个基本的帖子和评论 cakephp 应用程序。
我想显示一个表格,其中有一列按评论数显示帖子的排名。
我会通过帖子满足总评论的百分比。
我会在 cakephp 中的哪个位置执行此操作?我将在哪里计算帖子的评论数除以所有评论的总数?
我有一个基本的帖子和评论 cakephp 应用程序。
我想显示一个表格,其中有一列按评论数显示帖子的排名。
我会通过帖子满足总评论的百分比。
我会在 cakephp 中的哪个位置执行此操作?我将在哪里计算帖子的评论数除以所有评论的总数?
哪里:你在模型中做。这是很好的做法。
如何:我看到了两种有效的方法(我的意思是,有很多替代方法,但这些是最简单的,不要到处重复代码)
使用虚拟字段。在你的模型中做类似的事情
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);
如果出于任何原因您希望每次调用 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功能。所以改变它以满足您的需求。