2010-05-28 8 views
13

En utilisant CakePHP 1.2, je suis en train de produire une requête GROUP BY:CakePHP et GROUP BY

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

Comment qualifieriez/devrais-je aller à faire cela? J'utilise 'Containable' si cela aide.

+0

Pouvez-vous nous donner votre Les modèles et leurs relations s'il vous plaît? Comme cela aidera à savoir quels modèles précèdent et se suivent dans votre 'find()' –

Répondre

25

C'est ce que j'eneded avec:

$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

Je ne connaissais pas le param 'group', bravo! – Nicolas

+2

De rien. – webbiedave

5

clés possibles par défaut, qui sont toutes en option:

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

Requête:

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

debug($resp);