If you want to paginate based on the primary model (in this case User, 
ignoring Like for the pagination), you have two possible options:

1) Add two parameters to the Like::getMostLiked() function to control 
"pagination" on the array returned, i.e.:

    class Like extends AppModel {
        ...
        function getMostLiked($limit = null, $page = 1) {
            // if $limit is null, then return all records
            ...
        }
    }

    class LikesController extends AppController {
        ...
        var $paginate = array(
            'limit' => 20,
            ...
        );

        function someAction() {
            // Load PaginatorHelper manually, since we're not using 
$this->paginate() ...
            $this->helpers[] = 'Paginator';
            $liked = $this->Like->getMostLiked($this->limit, 
$this->params['named']['page']);
            $this->loadModel('User');
            ...
        );
    
2) "Process" only a subset of the array returned by Like::getMostLiked(): 

    $liked = $this->Like->getMostLiked(); // <-- returns a pre-ordered list 
the way I want
    $this->loadModel('User');
    $like_list = array(); 

    // Define the start and end of the "page"
    if (isset($this->params['named']['page']) {
        $start = $this->limit * ($this->params['named']['page'] - 1);
        $end =  $this->limit * ($this->params['named']['page']);
    } else {
        $start = 0;
        $end = $this->limit;
    }
    for ($i = $start; $i < $end; $i++) {
        $list = $this->User->find('first', array(
            'contain' => array('Like'),
            'conditions' => array('User.id' => $user )));
        array_push($like_list, $list);
    }
    echo debug($like_list); die;  // <-- returns the list of results in 
exactly the order I want

Now if you want to paginate based on User AND the associated Like, it gets 
more complicated if User hasMany Like or User hasAndBelongsToMany Like or 
User hasAndBelongsToMany <someModel>  with Like (i.e. Like is the model for 
the join table between User and <someModel>.  That's because some User 
records may have more than one Like record, which will increase the number 
of rows displayed.  If that's the case, then knowing the association arrays 
for the User and Like models would be helpful, and possibly the code for 
getMostLiked().

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

Reply via email to