My Category Model:
class Category extends AppModel {
public $displayField = 'name';
// public $actsAs = array('Containable');
public $hasAndBelongsToMany = array(
'Post' => array(
'className' => 'Post',
'joinTable' => 'categories_postss',
'foreignKey' => 'category_id',
'associationForeignKey' => 'post_id',
'unique' => 'keepExisting'
)
);
}
$params['contain'] = array('Post' => array(
'limit'=> 3));
pr($this->Category->find('first',$params)); exit;
It is fetching all Posts, irrespective of limit. What I want to do:
I have this page where I ma listing all the categories and latest 5 posts related to it. I want to limit the associated model to only 5 rows.
Any ideas?
Containable behavior is not in use
The most likely reason for this problem is that the containable behavior is not being used at all.
Compare, for the below code example:
Without containable behavior, it'll generate the following queries:
With containable behavior, it'll generate the following queries:
Given this (and the code in the question) check that the AppModel has the containable behavior in
$actsAs
:Limit always required?
Alternatively, or possibly in addition, you may prefer to put a limit in the association definition - To do so just define the 'limit' key:
the
hasAndBelongsToMany
relationship seems unnecessary to me. I think you only needCategory hasMany Post
andPost belongsTo Category
relationships. Addcategory_id
to theposts
table. Make both modelsactAs containable
.Post Model
Category Model
Categories Controller