2013-03-16 31 views
0

我仍然在使用CakePHP进行开发,但是我遇到了轻微的障碍。CakePHP:修改相关表的条目

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

我想通过在Post表中添加一个名为“updated”的时间戳来完成此任务。然后,无论何时添加新评论,帖子的更新字段都会被修改。然后在索引上,我根据更新的时间戳显示帖子。

这是最好的方法吗?如果是这样,我将如何从Comment控制器修改Posts表中的条目?或者我会以评论的视角来做到这一点?

回答

0

您可以使用评价模型的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') 
       ) 
    ) 
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