Cakephp显示没有。每个用户发布的帖子

时间:2016-08-10 10:21:33

标签: php cakephp-2.0

我是新手,为任何愚蠢的错误道歉。我希望在用户索引页面上显示一个列,显示每个用户创建的帖子数量。该列就在那里,但我想弄清楚如何在用户发帖时自动更新。

用户/ index.ctp

<table>
    <tr>
        <th>Users</th>
        <th>Account type</th>
        <th>Registered</th>
        <th>No. of posts</th>
    </tr>

    <?php foreach ($users as $user): ?>
    <tr>
        <td><?php echo $user['User']['username']; ?></td>
        <td><?php echo $user['User']['role']; ?></td>
        <td><?php echo $user['User']['created']; ?></td>
        <td><?php echo $user['User']['post_count']; ?></td>
    </tr>
    <?php endforeach; ?>
</table>

我数据库的users表中的默认'post_count'为0。

所以在我的Posts控制器中,我想在add()函数中添加一个部分,其中发布帖子的用户的post_count增加1. add()函数在 PostsController.php中

public function add() {
    if ($this->request->is('post')) {
        $this->request->data['Post']['user_id'] = $this->Auth->user('id');
        $this->request->data['Post']['user_username'] = $this->Auth->user('username');
        $this->Post->create();
        if ($this->Post->save($this->request->data)) {
            $this->Flash->success(__('Your post has been saved.'));
            return $this->redirect(array('action' => 'index'));
        }
        $this->Flash->error(__('Unable to add your post.'));
    }
}

我尝试添加以下几行:

public function add() {
    if ($this->request->is('post')) {
        $this->request->data['Post']['user_id'] = $this->Auth->user('id');
        $this->request->data['Post']['user_username'] = $this->Auth->user('username');
        $this->Post->create();
        if ($this->Post->save($this->request->data)) {
            $this->Flash->success(__('Your post has been saved.'));
        --> $postCount = $this->Auth->user('post_count');
        --> $postCount++;
        --> $user['post_count'] = $postcount;
            return $this->redirect(array('action' => 'index'));
        }
        $this->Flash->error(__('Unable to add your post.'));
    }
}

但它们没有任何效果。 任何帮助都会受到赞赏,即使只是告诉我我是否在正确的轨道上。

3 个答案:

答案 0 :(得分:0)

CakePHP有一个内置函数(CounterCache),用于你想要做的事情:http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#countercache-cache-your-count

答案 1 :(得分:0)

好吧,在用户表中递增或删除帖子计数是错误的方法。解决这个问题的最好方法是定义hasMany&amp;属于用户和关系中的关系发布模型。一旦关系适合外键。在用户索引页面中,您将获得属于每个用户的帖子数量。

注意:获取用户创建的帖子数量

答案 2 :(得分:0)

对于将来对我有类似问题的人,我使用counterCache函数解决了这个问题。

我在帖子模型中写道:

public $belongsTo = array(
    'User' => array(
        'counterCache' => true,
    )
);