cakephp绑定模型与计数

时间:2012-01-09 17:53:15

标签: cakephp pagination cakephp-2.0 cakephp-appmodel

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

User.php(Model)

<?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选项,但没有运气。

2 个答案:

答案 0 :(得分:1)

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

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

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

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

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

蛋糕调试器对于调查数据蛋糕输出非常有用:

debug($yourdataarray)

然而,找到每个帖子并计算它们听起来可能是性能问题。我个人已经完成的解决方案是在模型中添加和删除控制器,例如“发布”添加或从相关用户的数据库条目中的帖子计数字段中删除。然后,您可以快速简单地回显这些数据。

希望有所帮助。

答案 1 :(得分:1)

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

在你的帖子模型中:

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

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

post_count INT()

一旦完成,每次用户保存/删除帖子时,它的post_count将自动递增/递减,这很方便。

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

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