Hi Steve, Sounds like you need to use the 'joins' param in a find and skip containable, here's the manual page http://book.cakephp.org/view/872/Joining-tables
hth Jon On 26 January 2011 10:37, Steve <[email protected]> wrote: > Unfortunately using Containable did not work as I would have hoped. > > 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 <[email protected]> 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 > [email protected] For more options, visit this group at > http://groups.google.com/group/cake-php > -- jon bennett - www.jben.net - blog.jben.net -- 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 [email protected] For more options, visit this group at http://groups.google.com/group/cake-php
