Cakephp 使用可链接行为的多个计算字段无效

Cakephp 使用可链接行为的多个计算字段无效,cakephp,behavior,cakephp-2.2,Cakephp,Behavior,Cakephp 2.2,我在我的ArticlesController中试图显示按文章描述数量排序的顶级文章海报列表。该表还需要显示用户拥有的总点数(无顺序)。当我自己计算文章总数或点数之和时,它工作得很好,但当我试图同时计算这两个数时,它返回的值不正确。例如,如果一个用户在articles表中有5条记录,在points表中有10条记录(比如说50个点,每个点5个),那么它将输出该用户有50篇文章和250个点 $this->paginate = array( 'fields' => array(

我在我的ArticlesController中试图显示按文章描述数量排序的顶级文章海报列表。该表还需要显示用户拥有的总点数(无顺序)。当我自己计算文章总数或点数之和时,它工作得很好,但当我试图同时计算这两个数时,它返回的值不正确。例如,如果一个用户在articles表中有5条记录,在points表中有10条记录(比如说50个点,每个点5个),那么它将输出该用户有50篇文章和250个点

$this->paginate = array(
    'fields' => array(
        'User.username', 'User.online',
    ),
    'conditions'    => array(
        'Article.page_id'  => $page_id,
        'Article.status_id BETWEEN ? AND ?' => array(2,6),
        'Point.page_id'  => $page_id,
    ),
    'link'  => array(
        'Article' => array(
            'fields' => array(
                'Article.id', 'COUNT(Article.id) AS articles'
            )
       ),
       'Point' => array(
            'fields' => array(
                'Point.id', 'SUM(Point.amount) AS page_points'
             )
        ),
    ),
    'group' => 'User.id',
    'order' => 'articles DESC, User.username ASC',
    'limit' => 35,
    'contain' => array(
        'Avatar' => array(
            'fields' => array(
                'Avatar.file'
             )
        ),
    ) // contain
);

$this->set('users', $this->paginate('User'));

问题仍然存在,使用可链接行为的多个计算字段会导致计算扭曲。返回的数字乘以每个链接模型的行数

下面实际上实现了我想要的功能,但甚至更好,因为它与分页排序一起工作

$this->User->virtualFields['page_points'] = "(select SUM(amount)
    from points as Point 
    where Point.user_id = User.id
    AND Point.page_id = $page_id
)";

$this->User->virtualFields['page_articles'] = "(select COUNT(Post.id)
    from posts as Post
    where Post.user_id = User.id
    AND Post.page_id = $page_id
    AND Post.status_id BETWEEN 2 AND 6
    AND Post.module_id = $module_id
)";

$this->paginate = array(
    'fields' => array(
        'User.id', 'User.username', 'User.online', 'User.points', 'User.page_points', 'User.page_articles'
    ),
    'link'  => array(
        'Post' => array(
            'fields' => array(
                'Post.id'
            ),
        ),
    ),
    'group' => 'User.id',
    'order' => 'User.page_articles DESC, User.username ASC',
    'limit' => 10,
    'contain' => array(
        'Avatar' => array(
            'fields' => array(
                'Avatar.file'
            ) // avatar fields
        ), // avatar
    ) // contain
); // paginate

$this->set('users', $this->paginate('User'));
显然,如果我仍然没有链接到Post模型,它就不起作用了。所以我链接到Post模型,只获得一个id。查询速度似乎不是问题。我无法计算链接中的帖子,否则我将无法在分页器排序中使用结果