1
votes

I have a model Content which belongsTo Categories, hasMany Publishers, and Publisher belongsTo city. There is also a search form where someone selects from a drop-down box which category to view and which city.

But how can I combine these two in a single paginate condition? I mean I cannot do something like:

$this->paginate('Content',array('conditions' =>array('Category.id'=>$category,
'City.id'=>$city)));

because to get cities cake performs a different query.

Nor can I do something like:

$this->paginate('Content',array('conditions' =>array('Category.id'=>$category),
 'contain'=>array('Publisher.City'=>array('conditions'=>array(City.id'=>$city)))));

because this will search according to category and filter the city results according to $city.

I know I can do something like:

$this->Content->Publisher->City->find(...)

but this will change the output of my paginated data.

What I usually do is write my custom query where I LEFT join all models and filter the results in WHERE. But I wanted to aks if there is a more cake (sic) way!

thanks

1

1 Answers

0
votes

i've experienced the same thing when i first try to create a simple search engine with hasmany relationship.

i used multiple $this->find() and assigned it in a variable then on the paginate code i used$this->paginate(array_merge(name of the variables used in $this->find()));.

hope this will help you...

~gio