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 <stephen@foundfamily.co.uk> 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 <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
>
--
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
cake-php+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/cake-php
No comments:
Post a Comment