2010-05-28 50 views
13

Sử dụng CakePHP 1.2, tôi đang cố gắng tạo ra một truy vấn GROUP BY:CakePHP và GROUP BY

SELECT `categories`.*, COUNT(`entities`.id) 
FROM `categories` 
LEFT JOIN `entities` ON (`categories`.`id` = `entities`.`category_id`) 
GROUP BY `categories`.`id` 

Làm thế nào sẽ/tôi nên đi về việc này? Tôi đang sử dụng 'Chứa' nếu điều đó có ích.

+0

Bạn có thể cho chúng tôi của bạn Mô hình và mối quan hệ của họ xin vui lòng? Vì điều này sẽ giúp bạn biết các mô hình nào đứng trước và theo dõi nhau trong 'find()' –

Trả lời

25

Đây là những gì tôi eneded với:

$options = array(
        'conditions' => $conditions, 
        'fields'=>array('Category.*','COUNT(`Entity`.`id`) as `entity_count`'), 
        'joins' => array('LEFT JOIN `entities` AS Entity ON `Entity`.`category_id` = `Category`.`id`'), 
        'group' => '`Category`.`id`', 
        'contain' => array('Domain' => array('fields' => array('title'))) 
       ); 

       return $this->find('all', $options); 
+0

Tôi không biết thông số 'nhóm', cổ vũ! – Nicolas

+2

Bạn được chào đón. – webbiedave

5

phím có thể xảy ra theo mặc định, tất cả đều là không bắt buộc:

$params = 
     array(
     'conditions' => array('Model.field' => $thisValue), //array of conditions 
     'recursive' => 1, //int 
     //array of field names 
     'fields' => array('Model.field1', 'DISTINCT Model.field2'), 
     //string or array defining order 
     'order' => array('Model.created', 'Model.field3 DESC'), 
     'group' => array('Model.field'), //fields to GROUP BY 
     'joins' => array('Join relations here'), // for ex: LEFT JOIN `entities` AS Entity ON `Entity`.`category_id` = `Category`.`id` 
     'limit' => n, //int 
     'page' => n, //int 
     'offset' => n, //int 
     'callbacks' => true //other possible values are false, 'before', 'after' 
    ); 

Query:

$resp = find('all', $params); 

debug($resp);