我想通过相关的Jobstasks得到我的工作,但是从Jobstasks我想要计算总数1 - 所有工作中的任务(这很有效)和(评论,当然不工作)总计2 - 计算完成的任务。有什么想法吗?
$jobs = $this->Jobs->find('all')
->where(['Jobs.user_id' => $user_id])
->andWhere(['Jobs.start >' => new \DateTime('+6 days')])
->contain(['Jobgroups',
'Jobstasks' => function($q){
$q->select([
'JobsTasks.job_id',
'JobsTasks.finished',
'total1' => $q->func()->count('JobsTasks.job_id'),
//'total2' => $q->func()->where(['JobsTasks.finished' => true])->count()
])->group(['JobsTasks.id']);
return $q;
}
])
->order(['Jobs.start' => 'ASC']);
答案 0 :(得分:0)
我想你可以简单地对完成的列进行SUM,对于完成的任务,它是1,否则为0
'total1' => $q->func()->sum('JobsTasks.finished')
这适用于布尔人。如果你有一个更复杂的条件,我会创建一个计算字段来评估你的条件,而不是WHERE子句
类似
'total2' => "SUM(IF(JobsTasks.finished = true, 1, 0))"
答案 1 :(得分:0)
Thnx给你Arilia,你的总数2很棒:)改变total1是没有必要的。以下是解决方案。我必须更改分组以获得正确的数据输出。
$jobs = $this->Jobs->find('all')
->where(['Jobs.user_id' => $user_id])
->andWhere(['Jobs.start >' => new \DateTime('+6 days')])
->contain(['Jobgroups',
'Jobstasks' => function($q){
$q->select([
'JobsTasks.job_id',
'total1' => $q->func()->count('JobsTasks.finished'),
'total2' => "SUM(IF(JobsTasks.finished = 1, 1, 0))"
])->group(['JobsTasks.job_id']);
return $q;
}
])
->order(['Jobs.start' => 'ASC']);