【问题标题】:cakephp bindmodel with countcakephp bindmodel 与计数
【发布时间】:2012-02-06 06:00:30
【问题描述】:

我有两个模型。 1) 用户和 2) 发布 一个用户可以有很多帖子。这意味着,在这里我们将使用 hasMany 绑定两个模型。我正在列出用户,并且在该列表中,我想显示帖子的#no。我正在使用 cakephp 分页。我无法以这种方式列出。请提供任何帮助。

User.php(模型)

<?php
class User extends AppModel {
    var $name = 'User';
    var $primaryKey = 'user_id';
    var $hasMany = array('Post');
}
?>

Post.php(模型)

<?php
class Post extends AppModel {
    var $name = 'Post';
    var $primaryKey = 'post_id';
}
?>

控制器中的分页应该写什么?

我尝试了counterCache 选项,但没有成功。

【问题讨论】:

    标签: cakephp pagination cakephp-2.0 cakephp-model


    【解决方案1】:

    您可以使用 counterCache 但为此您需要在模型中指定它

    在您的 Post 模型中:

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

    您的用户表必须有一个附加字段

    post_count INT()
    

    完成此操作后,每次用户保存/删除帖子时,它的 post_count 都会自动增加/减少,这很方便。

    另一种解决方案是在搜索参数中添加一个组子句

    'group' => array('Post.id'),
    'fields' => array('count(Post.id) as post_count', ...),
    

    【讨论】:

      【解决方案2】:

      你到底想展示什么?您想在显示用户列表时显示每个用户的帖子数?

      如果是这样,这与分页无关,而是与控制器中检索的数据蛋糕数组有关。

      假设有一个名为 index 的控制器:

      function index() {
          $this->User->recursive = 0;
          $this->set('users', $this->paginate());
      }
      

      如果您的关系设置正确[看起来如此],您应该能够找到嵌套在该数组中的所有用户帖子。然后您可以计算它们并显示结果。

      cake 调试器对于调查输出给您的数据 cake 非常有用:

      debug($yourdataarray)
      

      但是,查找每个帖子并对其进行计数听起来可能是性能问题。我个人做过的一个解决方案是让模型中的添加和删除控制器,如“发布”,在相关用户的数据库条目的帖子计数字段中添加或删除。然后,您可以快速简单地回显该数据。

      希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多