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
-~----------~----~----~----~------~----~------~--~---