2017-08-30 9 views
0

Jobstasksに関連したJobsを取得したいのですが、Jobstasksから計算したいと思うのですが、仕事のすべての仕事(thatsはうまくいく)、(コメントあり、ofcourse not working)完了したタスク。何か案が?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

私は、あなたは、単に完成列を合計することができていることを推測、SINC、これはブール値のために働くの完成タスクのための1と0それ以外

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

です。あなたは、より複雑な条件を持っている場合は、私が代わりに

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

あなたAriliaへのthnxのようなWHERE句

何かのあなたの状態を評価する計算フィールドを作成し、あなたのTOTAL2は素晴らしい:)変更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']); 
関連する問題