Hello, I wanted to know if there is a better way to do this ? //my old way of getting all my friends but has no pagination. class FriendsController extends AppController { var $name = 'Friends'; function view($memberId = null) { if (!isset($memberId) ){ $memberId = $this->Authentication->getId(); } $this->pageTitle = "View Friends of " . $memberData["Member"] ["fname"];
$this->set('memberData',$memberData); $this->set('friendList', $this->Friend->getFriendList($memberId)); $this->render(); } } ?> <?php class Friend extends AppModel { var $name = 'Friend'; function getFriendList($personId = null) { if (!isset($personId) || empty($personId)) { return false; } else { $q = "SELECT Member.id, Member.fname, Member.lname, Profile.gender, Profile.primaryPhotoSrc FROM members Member JOIN profiles Profile ON Member.id = Profile.member_id WHERE Member.id IN ( SELECT receiver_member_id FROM friends WHERE sender_member_id = '" . $personId . "') and Member.isActive = '1' order by Member.fname"; return $this->query($q); } } } ?> /******** The above is the old way i did it. I want to be able to paginate my view. Is there a better way to do it than the way i have it below ? ***************/ <?php class FriendsController extends AppController { var $name = 'Friends'; var $paginate = array( 'fields' => array('Member.id', 'Member.fname', 'Member.lname','Member.modified', 'Profile.gender','Profile.primaryPhotoSrc'), 'order' => array('Member.fname' => 'asc'), 'limit' => 10 ); function view($memberId = null) { $friendIdsExtracted = array(); $memberData = array(); //I'd like to view person X's friends. if (isset($memberId) ){ $this->Session->del($this->name.'.friendId'); $this->Session->del($this->name.'.friendIdsExtracted'); } //Scenario: I just in to this action with a memberId and I am currently going //through or paging through all of his friends if($this->Session->check($this->name.'.friendId')){ $memberData = $this->Session->read($this->name.'.memberData'); $friendId = $this->Session->read($this->name.'.friendId'); $friendIdsExtracted = $this->Session->read($this- >name.'.friendIdsExtracted'); }else{ //I just came into this action with a memberId. //and I'd like to see page 1 of all of his friends. if( !isset($memberId) ){ $memberId = $this->Auth->user("id"); } $memberData = $this->Member->getActiveMemberInfoById($memberId); //if they want to view friends of a non active member, return him to member page. if (empty($memberData) ){ $this->redirect(array("controller"=>"members", "action"=>"index"),null,true); } //keeping with the fact that i just came in with a memberId and i am on page1 //I want a list of ids that I am a friend with. this is similar to the inner select //i had before : SELECT receiver_member_id FROM friends WHERE sender_member_id = '" . $personId . "' $listofIds = $this->Friend->findAll(array("sender_member_id" => $memberId), array("receiver_member_id")); //the list of ids returned is like [0]=>array([Friend]=>array(receiver_member_id=>x)), //manipulate list to show only the ids. $friendIdsExtracted = Set::extract($listofIds,'{n}.Friend.receiver_member_id'); $this->Session->write($this->name.'.memberData', $memberData); $this->Session->write($this->name.'.friendId', $memberId); $this->Session->write($this->name.'.friendIdsExtracted', $friendIdsExtracted); } //this makes the paginate function do a select the above fields from Member where id in (a,b,c,d,e,f,g,h) limit x,y $conditions= array("Member.id" => $friendIdsExtracted); $this->set('memberData', $memberData); $this->set('friendList', $this->paginate('Member', $conditions)); } --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "CakePHP" group. To post to this group, send email to cake-php@googlegroups.com 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 -~----------~----~----~----~------~----~------~--~---