Cakephp 使用可链接行为的多个计算字段无效
我在我的ArticlesController中试图显示按文章描述数量排序的顶级文章海报列表。该表还需要显示用户拥有的总点数(无顺序)。当我自己计算文章总数或点数之和时,它工作得很好,但当我试图同时计算这两个数时,它返回的值不正确。例如,如果一个用户在articles表中有5条记录,在points表中有10条记录(比如说50个点,每个点5个),那么它将输出该用户有50篇文章和250个点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(
$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。查询速度似乎不是问题。我无法计算链接中的帖子,否则我将无法在分页器排序中使用结果