2016-04-26 82 views
5

我有一個表郵政,這有一個具有一對多協會與表計數在包含CakePHP的3

我可以使用所有相關的數據:

$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

你必須也選擇外鍵否則蛋糕是不能夠加入表。而且你也對結果進行分組

'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

試試這個:

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

由於吹罰的cookbook

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中的語法?