2016-04-26 8 views
5

CakePHPの3が含まれています。でのカウントは、私はポスト</strong>テーブル<strong>を持っており、これはテーブル<strong>スター</strong>と<strong>あり、多くの</strong>関連性を持っている

私が使用して、関連するすべてのデータを取得することができます。

$this->Posts->find()->contain(['Stars']); 

うまく動作します。

しかし、私は星を数えたいと思います。私はこれを試しましたが、動作しません。

$this->Posts->find->contain([ 
    'Stars' => function($q) { 
     return $q->select(['total' => $q->func()->count('Stars.post_id')]); 
    } 
]); 

//I've also tried this 
... 
...$q->select(['total' => "COUNT(Stars.post_id)"]); 
... 
//Also fail 

これは関連する星の数を返しません。

何か問題がありますか、それとも別の方法がありますか?あなたもそうでないケーキがテーブルを結合することはできない外部キーを選択する必要が

おかげ

+0

"_doesn't work_"は適切な問題の説明ではありません!問題がCakePHPの内部を知っている人にとって明らかであっても、_exactly_が何を起しているか、そして何が起こるかについて常に可能な限り具体的にしてください。作業中のデータ、コンテキスト、デバッグの試行、エラーの可能性を表示します。多くの場合、これらの情報を収集するときに問題が解決されます。 – ndm

答えて

9

cookbookに査読したよう

$total = $this->Posts->find()->contain(['Stars'])->count(); 

:そして、あなたはグループにも結果を持って

'Stars' => function($q) { 
    $q->select([ 
     'Stars.post_id', 
     'total' => $q->func()->count('Stars.post_id') 
    ]) 
    ->group(['Stars.post_id']); 

    return $q; 
} 
+0

これはちょうど私が望むやり方で働いています。ありがとう... – Willian

+0

'group()'関数に ')'が欠けています。それを更新してください。 @arilia –

+0

@SumonSarker私は編集しましたが、あなたも回答を編集できます。 – arilia

-1

はこれを試してみてください。

0

として、ここで私たちが仮想フィールドとして合計を使用していた、と同じモデルにより次のように作成することができますよう、ここで私は何を、私は別の条件でキャンセルを計算したい、完了して計算している

public function index() 
    { 
     $checklist = TableRegistry::get('Checklists'); 
     $query = $checklist->find() 
      ->where('Checklists.is_deleted = 0') 
      ->contain([ 
       'ChecklistTitles' => function($q) { 
        return $q -> select([ 
         'ChecklistTitles.title', 
         'ChecklistTitles.checklist_id' 
       ]); 

      }, 
       'ChecklistTypes' => function($w){ 
        return $w->select(['ChecklistTypes.type']); 
      }, 
       'AssignedChecklists' => function($e){ 
          $e->select([ 
           'AssignedChecklists.checklist_id', 
           'completed' => $e->func() 
        ->count('AssignedChecklists.checklist_id'), 
         ]) 
         ->group(['AssignedChecklists.checklist_id']) 
         ->where(['AssignedChecklists.is_deleted = 0 AND AssignedChecklists.checklist_status = 2']); 
        return $e; 
       } 
       ]); 
     // ->toArray(); 
     // pr($query);die; 
       $this->paginate = [ 
      'limit' => 20, 
      'sortWhitelist' => [ 
       'id', 'checklist_title', 'checklist_type' 
      ] 
     ]; 
     $this->set('query', $this->paginate($query)); 
     $this->set(compact('checklists','query')); 
     $this->set('_serialize', ['checklists','query']); 

    } 

cakephp3のそれの構文ですか?

関連する問題

 関連する問題