My problem is I have a 2 search functions in 1 controller so I have 2
different paginations sets. I had a huge $paginate like your below and I
just hated seeing it in the controller so what I have done is

Controller:

function index()
      {
                  //get the list of bookmark id's belonging to the logged in
user
          $bookmarks =
$this->Bookmark->__getBookmarks($this->Auth->user('id'),
$this->Auth->user('rank'));
                  
                  //set the $params to query in the model 
                  $this->paginate['Bookmark'] =
$this->Bookmark->__paginateBookmark($this->Auth->user('id'),$this->Auth->use
r('rank'));
                  //paginate the list
                  $data = $this->paginate('Bookmark', array('Bookmark.id' =>
$bookmarks));
          $this->set('bookmarks', $data);
      }

So __getBookmarks in the model gets me a list of Bookmark.id's
And
__paginateBookmark() is all the $params like you have below

Model:
function __paginateBookmark ($auth_id, $rank)
{
$params = array(
        'Download' => array(
                'fields' => array(
                        'Download.id',
                        'Download.path',
                        'COUNT(Download.id) AS count',
                        'Download.item_file_id'
                ),
                'limit' => 25,
                'order' => array('count' => 'DESC'),
                'group' => array('Download.path'),
                'contain' => array(
                        'ItemFile' => array(
                                'fields' => array(
                                        'ItemFile.id',
                                        'ItemFile.basename',
                                        'ItemFile.type',
                                        'ItemFile.item_id'
                                ),
                                'Item' => array(
                                        'fields' => array('Item.id',
'Item.name'),
                                        'Thumbnail' => array(
                                                'fields' => array(
                                                        'Thumbnail.item_id',
        
'Thumbnail.basename',
        
'Thumbnail.directory',
                                                        'Thumbnail.width',
                                                        'Thumbnail.height'
                                                )
                                        )
                                )
                        )
                )       
        )
);
return $params;
}

But one thing I see you have that I never did quite understnd is  public /
private. I have see other people use it in their code but not sure what that
is for.

-----Original Message-----
From: brian [mailto:[email protected]] 
Sent: August-17-09 12:26 AM
To: [email protected]
Subject: Re: Another Paginate Question


On Sun, Aug 16, 2009 at 9:21 PM, Dave Maharaj ::
WidePixels.com<[email protected]> wrote:
>
> Never seen this $this->paginate['Bookmark']['contain'] = before, the 
> ['contain'] part I mean
>
>
> So I just use it like a normal find array?
>
> $this->paginate['Bookmark']['contain'] = array('Job' => array('fields' 
> => array(so on and on))),
>
> And
>
> $this->paginate['Bookmark']['conditions'] = array('Bookmark.user_id' 
> => $this->Auth->user('id')),

This is from a controller I'm working on right now.

public $paginate = array(
        'Download' => array(
                'fields' => array(
                        'Download.id',
                        'Download.path',
                        'COUNT(Download.id) AS count',
                        'Download.item_file_id'
                ),
                'limit' => 25,
                'order' => array('count' => 'DESC'),
                'group' => array('Download.path'),
                'contain' => array(
                        'ItemFile' => array(
                                'fields' => array(
                                        'ItemFile.id',
                                        'ItemFile.basename',
                                        'ItemFile.type',
                                        'ItemFile.item_id'
                                ),
                                'Item' => array(
                                        'fields' => array('Item.id',
'Item.name'),
                                        'Thumbnail' => array(
                                                'fields' => array(
                                                        'Thumbnail.item_id',
        
'Thumbnail.basename',
        
'Thumbnail.directory',
                                                        'Thumbnail.width',
                                                        'Thumbnail.height'
                                                )
                                        )
                                )
                        )
                )       
        )
);

This is a bit more complex than usual because I'm using COUNT() and GROUP,
but it still shows the contain bit.

In a particular action, if I wanted to narrow that down, I'd do, eg.

$this->paginate['Download']['conditions'] = array(
        'Download.foo' => $foo
);

And so that condition will be effective for any paginate() calls within this
action only.

> Is there no easy way to paginate from an array? Use a normal find() 
> and pass the result to paginate?

I'm not sure what you mean by "from an array". AFAIK, it's the *only* way to
set up the params. As for using a normal find(), that's pretty much what the
controller does in the end. That's why the array setup for paginate() is
pretty much the same as find().



--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"CakePHP" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/cake-php?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to