CakePHP——相关模型中唯一属性的有效计数
我有一个帖子模型,它有一个关联的评论模型。每个评论都有一个与用户模型关联的用户id…所有这些都是非常标准的东西CakePHP——相关模型中唯一属性的有效计数,cakephp,cakephp-1.3,Cakephp,Cakephp 1.3,我有一个帖子模型,它有一个关联的评论模型。每个评论都有一个与用户模型关联的用户id…所有这些都是非常标准的东西 本质上,当我对我感兴趣的所有帖子进行find查询时,我正在寻找一种方法来有效地获取对每篇帖子发表评论的唯一用户id的数量。您是否使用了counterCache?这可能会让你到达你需要的地方。您还需要将其与计数器上的一些奇特条件结合起来。这将允许您在保存/更新记录时保存评论人数,而不是动态保存;从而实现更快的页面和更好的用户体验 现在,单凭这一点可能无法得出最终的解决方案。考虑使用反缓存
本质上,当我对我感兴趣的所有帖子进行find查询时,我正在寻找一种方法来有效地获取对每篇帖子发表评论的唯一用户id的数量。您是否使用了
counterCache
?这可能会让你到达你需要的地方。您还需要将其与计数器上的一些奇特条件结合起来。这将允许您在保存/更新记录时保存评论人数,而不是动态保存;从而实现更快的页面和更好的用户体验
现在,单凭这一点可能无法得出最终的解决方案。考虑使用反缓存/反作用域和虚拟字段的组合来拉动数据并以这种方式进行更新。
我假设Post有很多评论关系,因此查找结果如下所示:
$posts = array(
0 => array
(
'Post' => array
(
'id' => 1
, 'Comment' => array
(
0 => array
(
'id' => 1
)
, 1 => array
(
'id' => 2
)
)
)
)
, 1 => array
(
'Post' => array
(
'id' => 2
, 'Comment' => array
(
0 => array
(
'id' => 3
)
)
)
)
, 2 => array
(
'Post' => array
(
'id' => 3
, 'Comment' => array
(
0 => array
(
'id' => 4
)
, 1 => array
(
'id' => 5
)
, 2 => array
(
'id' => 6
)
)
)
));
$userIds = Set::extract($posts, '{n}.Post.Comment.{n}.id');
然后可以使用提取id,如下所示:
$posts = array(
0 => array
(
'Post' => array
(
'id' => 1
, 'Comment' => array
(
0 => array
(
'id' => 1
)
, 1 => array
(
'id' => 2
)
)
)
)
, 1 => array
(
'Post' => array
(
'id' => 2
, 'Comment' => array
(
0 => array
(
'id' => 3
)
)
)
)
, 2 => array
(
'Post' => array
(
'id' => 3
, 'Comment' => array
(
0 => array
(
'id' => 4
)
, 1 => array
(
'id' => 5
)
, 2 => array
(
'id' => 6
)
)
)
));
$userIds = Set::extract($posts, '{n}.Post.Comment.{n}.id');
如果存在重复项,则可以称为array_unique:
$userIds = array_unique($userIds);
那就够了