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