我仍然在使用CakePHP进行开发,但是我遇到了一个小问题。
问题:基本上我的帖子都带有评论。我想做的是将最近更新的帖子显示在索引页面的顶部(因此,当新帖子添加到帖子中时,如果它是最新的,则将其推送到顶部)。
我正在考虑通过在Post表中设置一个名为“updated”的时间戳来完成此操作。然后,每当添加新评论时,都会修改帖子的更新字段。然后在索引上,我根据更新的时间戳显示帖子。
这是最好的方法吗?如果是这样,我如何从Comment控制器修改Posts表中的条目?或者我会在评论的视图中这样做吗?
答案 0 :(得分:1)
如果在SQL表中有名为“created”和“modified”的列,CakePHP将在您保存数据时自动处理时间戳。然后,您可以在最近修改过的控制器和视图中订购结果。
class PostsController extends AppController {
public function index() {
$posts = $this->Post->find('all', array(
//Use ASC or DESC for ordering
'order' => array('modified' => 'DESC')
));
$this->set('posts', $posts);
}
}
在控制器中试用该代码,然后就可以使用debug($ posts);在控制器或视图中查看结果。无论如何,文档都有大量关于如何做这些事情的信息。
答案 1 :(得分:0)
您可以使用Comment model的afterSave回调来更新时间戳。
但我认为最好的方法是使用来自控制器的$ this-> [model] - > saveAssociated()方法。
通过在评论提交中使用以下结构,您可以致电
来自评论控制器的$this->Comment->saveAssociated($params);
。
//we know the Post.id
$params => array(
[Comment] => array(
'comment'=>'comment text',
'commented_by'=>'comment owner_id',
),
[Post] => array(
'id'=>1,
'commented_on'=>date('Y-m-d H:i:s')
)
)