Asim Zaidi
Asim Zaidi

Reputation: 28284

cakephp how to get the count in the query

I am using this query to get all the data but I also need add in it how many rows it's returning.

Here is my code:

function getUsers($id){
    $users = $this->User->find('all', array('condition'=>array('my_id'=>$id)));
    $numUsers = sizeof($users);
    $users['User']['Total']= $numUsers;
    echo  json_encode($users);
}

The $dArray contains all the data for the users but I also want it to tell me how many users were there.

I was thinking that I would get data within the User object but this is what us gives me

Object
0: Object
1: Object
2: Object
3: Object
4: Object
5: Object
User: Object
Total: 6


instead of adding it to the 

0: Object
Company: Object
Group: Object
Team: Array[0]
User: Object
company_id: "20"
created: "2012-04-15 17:35:51"
email: "[email protected]"
expiration_date: "2012-04-15 17:35:00"
firstname: "jason"
grants_id: null
group_id: "1"
id: "1"
lastname: "brawar"
modified: "2012-04-23 14:25:48"
name: null
password: "203e686b6a6938648ddd3eb0a8d95988ac638596"
phone: "abcd"
status: "Active"
type: null
username: "asim"
Total: 1

Upvotes: 6

Views: 39673

Answers (4)

Evgenia Karunus
Evgenia Karunus

Reputation: 11202

  1. If you already fetched the rows - sizeof($users);, like mentioned in other answers.

  2. However, if you want to execute sql's COUNT, since Cake 3 you can use ->count() on your query:

$query = $this->User->find('all');
$number = $query->count();

Upvotes: 2

Dave
Dave

Reputation: 29121

No need to do it in the query - just use PHP:

<?php
$this->User->recursive=-1;
$users = $this->User->find('all', array('conditions'=>array('my_id'=>$id)));
$numUsers = sizeof($users);

This will give you the number of main items (ie Users), since any "extra" data you want to include via recursive or containable will be nested within each individual User array.

Upvotes: 9

BruneX
BruneX

Reputation: 588

Maybe you are looking for this...

$conditions = array('somecondition' => $someCond);
$totalUsers = $this->User->find('count', array('conditions' => $conditions));

http://book.cakephp.org/2.0/en/models/retrieving-your-data.html#find-count

Ok, now if you want to get the total number of elements that each user, should do the following:

$users = $this->User->find('all');
foreach($users as $key => $user)
$ElementsForEachUser[$key]['totalRows'] = sizeof($user['User']);

Upvotes: 12

user2214236
user2214236

Reputation: 173

$conditions = array('somecondition' => $someCond);
$totalUsers = $this->User->find('count', array('conditions' => $conditions));

Upvotes: 2

Related Questions