1. I could not get containable to do an inner join on the data. This is
because the actual relationships between the Book, Category and Author
tables are many-to-many so it performs a search on the books then a
search on the authors of those filtered books whereas I want the books
that contain the text and any books whose author names contain the text.
In my overridden paginate function, I break the many-to-many
relationship, make it a one-to-many and tell it to do an inner join,
giving me the data that I want. In the long run this 'sledgehammer'
approach is probably more efficient as I am doing what I want in two
calls rather than coercing Containable to behave as I want it to through
some contrived array settings in my controller.
2. The paginateCount does not use fields it seems that it does a 'select
count(*) as count' so my usage of DISTINCT in the selection ( because a
book can be in more than one category so could be duplicated ) is lost
making the paginateCount return a different value than the number of
records returned by the select.
On Tue, 2011-01-25 at 14:35 -0500, cricket wrote:
> On Tue, Jan 25, 2011 at 9:00 AM, Steve <stephen@foundfamily.co.uk> wrote:
> > I have solved this by overriding the paginate and paginateCount methods
> > in my Book model.
>
> Instead of that, you could use Containable.
>
> And you don't need to have the else block in the index action. Declare
> $paginate as a class var, then add the 'conditions' array when
> required.
>
> public $paginate = array(
> 'limit' => 12,
> 'order' => array('Book.created' => 'desc'),
> 'contain' => array('Author')
> );
>
> function index()
> {
> $this->Book->recursive = 1;
>
> if ($this->search)
> {
> $this->paginate['conditions'] = $this->Book->searchConditions($this->search));
> }
>
> $this->set('books', $this->paginate('Book'));
> }
>
--
Our newest site for the community: CakePHP Video Tutorials http://tv.cakephp.org
Check out the new CakePHP Questions site http://ask.cakephp.org and help others with their CakePHP related questions.
To unsubscribe from this group, send email to
cake-php+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/cake-php
No comments:
Post a Comment