我有一个Post模型,它具有关联的评论模型。每条评论都有一个与用户模型相关的user_id ......所有非常标准的东西。CakePHP - 有效计算相关模型中的独特属性
从本质上讲,当我对所有感兴趣的帖子查找查询时,我正在寻找一种方法来有效地获取在每篇帖子上评论过的唯一user_id的数量。
我有一个Post模型,它具有关联的评论模型。每条评论都有一个与用户模型相关的user_id ......所有非常标准的东西。CakePHP - 有效计算相关模型中的独特属性
从本质上讲,当我对所有感兴趣的帖子查找查询时,我正在寻找一种方法来有效地获取在每篇帖子上评论过的唯一user_id的数量。
您使用过counterCache
吗?这可能会让你到达需要的地方。您还需要将它与counterScope
上的某些奇特条件结合使用。这将允许您在记录保存/更新时保存评论者的数量,而不是在飞行中;导致更快的页面和更好的用户体验。
现在,这本身可能无法让您达到最终解决方案。考虑使用counterCache/counterScope和virtualFields的组合来提取数据并以此方式进行更新。
我假设张贴的hasMany评论关系,所以查找结果是这个样子:
$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
)
)
)
));
然后,您可以使用Set class只提取ID是这样的:
$userIds = Set::extract($posts, '{n}.Post.Comment.{n}.id');
如果有重复,你可以调用array_unique:
$userIds = array_unique($userIds);
这应该这样做!