CakePHP find FAQ: Can you share some "CakePHP find conditions" examples?
One thing you need to get used to when working with CakePHP is the CakePHP find method. To that end, I thought I'd put together this page of CakePHP find conditions and find query examples.
CakePHP find conditions
To get started, here's a list of the possible CakePHP find conditions you can use:
Name Default Description type 'first' can be 'all', 'first', or 'list'. determines what type of find operation to perform. (TODO - more info here) conditions null array containing the find (select) conditions as key/value pairs fields null array specifying which fields should be retrieved in the resulting select query order null sql 'order by conditions. field name must be followed by ASC or DESC page null page number, used for paged data limit null a limit on the number of results returned, like 'select * from orders limit 20'. offset null sql offset value (i haven't used this query much myself, but i think it refers to skipping X number of rows returned in a query) recursive 1 the cakephp recursive value, relating to associated model data
CakePHP find condition examples
Given that reference information, let's take a look at some CakePHP find conditions examples.
First, a very simple CakePHP find query that retrieves all records from the Post model (probably not something you'll want to do in a production application):
$this->Post->find('all');
Next, a "CakePHP find all" query with one find condition:
$this->Post->find('all', array('conditions'=>array('User.id'=>5)));
A CakePHP find query with one "not equal to" find condition:
$this->Post->find('all', array('conditions'=>array('User.id'=>'<> 5')));
A find query with multiple CakePHP find conditions:
# this is a little lame, but i'm trying to avoid dates $this->Post->find('all', array('conditions'=>array('User.id'=>1, 'Post.id'=>'> 50')));
A CakePHP find query that uses all the find function parameters:
# TODO - i'm not sure that this is right; i think 'fields' is supposed to be an array $this->Post->find('all', array('conditions'=>array('User.id'=>5), 'fields'=>'Post.name', 'order'=>'Post.id ASC', 'limit'=>20, 'recursive'=>0));
A CakePHP find conditions query using a date:
# note: you can search for date or datetime fields by enclosing the table's field name # in the SQL DATE() function. $this->Post->find('all', array('conditions'=>array('User.id'=>5, 'DATE(Post.date)'=>'CURDATE()'))); # TODO demonstrate "date >" and "date <" conditions
CakePHP find conditions arrays with ORDER BY examples:
array('order'=>'date ASC') array('order'=>'date DESC') array('order'=>'User.id DESC')
A collection of other CakePHP find conditions/examples:
These CakePHP find examples are lines of code that would be used in an OrderController class: $this->Order->find('all'); $this->Order->find(null, null, 'date DESC'); $this->Order->find('all', array('conditions'=>array('User.id'=>1))); $this->Order->find('all', array('conditions'=>array('User.id'=>array(1,2,3,4)))); $this->Order->find('all', array('conditions'=>array('User.id'=>'<> 1'))); $this->Order->find('all', array('conditions'=>array('User.id'=>1, 'DATE(Post.date)'=>'CURDATE()'))); $this->Order->find('all', array('order'=>'date ASC', 'limit'=>20, 'recursive'=>0);
Here are some CakePHP find examples from the CakePHP retrieving your data book page:
$params can contain all these: array( 'conditions' => array('Model.field' => $thisValue), //array of conditions 'recursive' => 1, //int 'fields' => array('Model.field1', 'DISTINCT Model.field2'), //array of field names 'order' => array('Model.created', 'Model.field3 DESC'), //string or array defining order 'group' => array('Model.field'), //fields to GROUP BY 'limit' => n, //int 'page' => n, //int 'offset'=>n, //int 'callbacks' => true //other possible values are false, 'before', 'after' )
Here's a CakePHP function showing several different CakePHP find examples:
# find('first', $params) syntax function some_function() { ... $this->Article->order = null; // resetting if it's set $semiRandomArticle = $this->Article->find(); $this->Article->order = 'Article.created DESC'; // simulating the model having a default order $lastCreated = $this->Article->find(); $alsoLastCreated = $this->Article->find('first', array('order' => array('Article.created DESC'))); $specificallyThisOne = $this->Article->find('first', array('conditions' => array('Article.id' => 1))); ... }
CakePHP find count examples
Here's a CakePHP find count example:
# find('count', $params) # more cakephp find count examples function some_function() { ... $total = $this->Article->find('count'); $pending = $this->Article->find('count', array('conditions' => array('Article.status' => 'pending'))); $authors = $this->Article->User->find('count'); $publishedAuthors = $this->Article->find('count', array('fields' => 'DISTINCT Article.user_id', 'conditions' => array('Article.status !=' => 'pending') )); ... }
CakePHP find all examples
Here is a list of some CakePHP find all examples:
# find('all', $params) syntax # a cakephp find all example function some_function() { ... $allArticles = $this->Article->find('all'); $pending = $this->Article->find('all', array('conditions' => array('Article.status' => 'pending'))); $allAuthors = $this->Article->User->find('all'); $allPublishedAuthors = $this->Article->User->find('all', array('conditions' => array('Article.status !=' => 'pending'))); ... }
CakePHP find list examples
Here are some CakePHP find list examples, useful for creating select boxes:
# find('list', $params) syntax function some_function() { ... $allArticles = $this->Article->find('list'); $pending = $this->Article->find('list', array( 'conditions' => array('Article.status' => 'pending') )); $allAuthors = $this->Article->User->find('list'); $allPublishedAuthors = $this->Article->find('list', array( 'fields' => array('User.id', 'User.name'), 'conditions' => array('Article.status !=' => 'pending'), 'recursive' => 0 )); ... }
See the CakePHP retrieving your data book page for many more CakePHP find examples, including:
- find threaded
- find neighbors
- findAllBy
- findBy
- query
- field
- read
- More complex CakePHP find examples
CakePHP find conditions, find all, and find list
I hope this collection of CakePHP find conditions, including CakePHP find all and find list examples, has been helpful. If you have any example you'd like to share, feel free to use the Comments section below.