У вас есть два основных способа сделать это.
Если вас интересует только значение count
, вам обязательно следует использовать параметр 'count'
метода CakePHP AppModel::find()
:
$this->Room->find('count', array(
'conditions' => array('Room.room_type_id >=' => 3, ...),
'recursive' => 0, // Optional, in case you need to speed up things a bit
));
Таким образом, метод find
возвращает значение счетчика напрямую, а GROUP BY
не имеет смысла.
Но если вы хотите извлечь также каждый столбец, вы можете использовать «обычный» запрос поиска, подобный этому:
$this->Room->find('all', array(
'conditions' => array('Room.room_type_id >=' => 3, ...),
'group' => 'Room.room_type_id',
'fields' => array('Room.*', 'count(Room.room_type_id) as room_count'),
'recursive' => 0, // Optional, in case you need to speed up things a bit
));
Где find()
вернет массив вроде:
[0] =>
[Room] =>
[room_type_id] => 3
[0] =>
[room_count] => 2,
...
Я не помню, как именно CakePHP возвращает массив, но вы можете использовать debug()
, чтобы проверить его и узнать, как его получить (например, $rooms[0]['Room'][0]['room_count']
).
Последнее примечание: извлечение значения каждого столбца и включение предложения GROUP BY
не имеет большого смысла, если вы не используете агрегатную функцию SQL для каждого столбца (или если вы действительно не знаете, что делаете) .