Modifying binding conditions for a find

This recipe shows how to use Containable to change the conditions used to fetch data related to a model through a binding.

Getting ready

We need to have Containable added to our models, and we also need some sample models and data to work with. Follow the recipe, Adding Containable to all models, and the Getting ready section of the recipe, Modifying binding parameters for a find.

How to do it...

If we want to obtain the first User record together with the published Article records that user owns, but ordered by latest articles first, and limiting some of the returned fields, we use the conditions binding setting:

$user = $this->User->find('first', array(
'contain' => array(
'Article' => array(
'fields' => array('Article.title'),
'conditions' => array(
'Article.published' => 1
)
)
)
));

Using our sample data, the preceding query will result in the following array structure:

array(
'User' => array(
'id' => '1',
'name' => 'John Doe',
'email' => '[email protected]',
),
'Article' => array(
array(
'title' => 'John's Post 1',
'user_id' => '1'
),
array(
'title' => 'John's Post 2',
'user_id' => '1'
),
array(
'title' => 'John's Post 4',
'user_id' => '1'
)
)
)

How it works...

The conditions binding setting is another binding parameter, such as those shown in the recipe, Modifying binding parameters for a find. As such, the Containable behavior uses the built-in bindModel() method defined in CakePHP's Model class to alter the binding conditions defined in the contain find operation.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
18.119.235.79