我有两个型号。 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
选项,但没有运气。
答案 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', ...),