2017-08-30 99 views
0

我想让我的Jobs有相关的Jobstasks,但是从Jobstasks我想要算total1 - 所有任务都在工作中(那很好用)和(评论,ofcourse不工作)total2 - 统计完成任务。任何想法?Cakephp 3包含的多个条件

$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

我想,你可以简单地合计成品列,辛克是1对完成的任务,否则为0

'total1' => $q->func()->sum('JobsTasks.finished') 

这适用于布尔值。如果你有更复杂的情况我想创建一个计算领域的评估你的条件,而不是一个WHERE子句

'total2' => "SUM(IF(JobsTasks.finished = true, 1, 0))" 
0

日Thnx你Arilia的,你共2伟大工程:)变化共1页不必要。以下是解决方案。我必须改变分组以获得正确的数据输出。

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