0

我仍然在使用 CakePHP 进行开发,但是我遇到了一个小障碍。

问题:基本上我有评论的帖子。我想做的是将最近更新的帖子显示在其索引页面的顶部(因此,当向帖子添加新评论时,如果它是最新的,它会将其推到顶部)。

我正在考虑通过在 Post 表中添加一个名为“updated”之类的时间戳来实现这一点。然后,每当添加新评论时,都会修改帖子的更新字段。然后在索引上,我根据更新的时间戳显示帖子。

那会是最好的方法吗?如果是这样,我将如何从 Comment 控制器修改 Posts 表中的该条目?或者我会在评论的视图中这样做吗?

4

2 回答 2

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); 在控制器或您的视图中查看结果。无论如何,文档有大量关于如何做这些事情的信息。

CakePHP - 检索您的数据

于 2013-03-16T03:41:24.637 回答
0

您可以使用 Comment 模型的 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')
                 )
    )
于 2013-03-16T06:51:14.393 回答