Dave,

I looked at that link and I am not getting the same results as my
custom query with no pagination...
Here's the old custom query :

$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);

Heres with containable:

$this->Member->bind(array(
                                                                'Friend' => 
array(
                                                                                
                        'type' => 'hasMany',
                                                                                
                        'className' => 'Friend',
                                                                                
                        'foreignKey' => 'receiver_member_id',
                                                                                
                        'conditions' => 'Friend.sender_member_id =' . $memberId
                                                                                
                )
                                                                )
                                                        );
                        $this->paginate = array(
                                    'conditions'=>array("Member.isActive"),
                                    'limit'=>10,
                                    'order'=> array('Member.fname' => 'asc'),
                                    'fields'=> array('Member.id', 
'Member.fname',
'Member.lname','Member.modified',
'Profile.gender','Profile.primaryPhotoSrc'),
                                    'contain'=> array("Friend" => array(
                                                                                
                            'conditions' =>
array('Friend.sender_member_id' => $memberId),
                                                                                
                            'fields' => array('Friend.receiver_member_id')
                                                                                
                                        ),"Profile"
                                                                                
)
                                );
                                
$this->set('friendList',$this->Paginate('Member'));


On Jul 17, 1:38 pm, DaveMahon <[EMAIL PROTECTED]> wrote:
> You can combine Paginator and Containable to do this, and you would
> probably run the search against the Member model.
>
> http://lampable.blogspot.com/2008/07/merging-containablebehavior-and....
>
> On Jul 17, 11:55 am,mrconfused<[EMAIL PROTECTED]> wrote:
>
> > 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 [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