CakePHP - 在相关模型中有效计算唯一属性

时间:2012-09-25 15:27:53

标签: cakephp cakephp-1.3

我有一个Post模型,它有一个关联的Comment模型。每个评论都有一个user_id与User模型相关联...所有非常标准的东西。

基本上,当我在我感兴趣的所有帖子上查找查询时,我正在寻找一种方法来有效地获取每个帖子上评论的唯一user_id的数量。

2 个答案:

答案 0 :(得分:1)

您使用过counterCache吗?这可能会让你到达你需要的地方。您还希望将其与counterScope上的某些奇特条件相结合。这将允许您在保存/更新记录时保存评论者的数量,而不是动态;从而实现更快的页面和更好的用户体验。

现在,仅此一点可能无法让您找到最终解决方案。考虑使用counterCache / counterScope和virtualFields的组合来提取数据并以此方式更新。

Read about counterCache in the Book

答案 1 :(得分:0)

我假设Post hasMany Comment关系,所以查找结果看起来像这样:

$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); 

应该这样做!