CakePHP:修改相关表的条目

时间:2013-03-16 02:32:23

标签: cakephp

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

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

我正在考虑通过在Post表中设置一个名为“updated”的时间戳来完成此操作。然后,每当添加新评论时,都会修改帖子的更新字段。然后在索引上,我根据更新的时间戳显示帖子。

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

2 个答案:

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

CakePHP - Retrieving Your Data

答案 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')
                 )
    )