This recipe shows how to use Containable
to change the conditions used to fetch data related to a model through a binding.
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.
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' ) ) )
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.
18.119.235.79