Tuesday, February 1, 2011

Re: Containable Results

Thanks for your reply,

I have had a look at this and tried out a few options on how best to
implement pagination functionality using options and I came up with
something that works 99%. Because of the join that I am doing, It
means that in the event that I have a Transaction with more than one
TransactionDetail returned, an extra Transaction record is created.
Below is a snippet of the code;

$options['joins'] = array(
array(
'table' => 'transaction_detail',
'alias' => 'TransactionDetail',
'type' => 'LEFT',
'conditions' => array(
'Transaction.id =
TransactionDetail.transaction_id'
)
)
);
$options['conditions']=array(
'Transaction.matched'=>true,
'TransactionDetail.shop_id'=>$this->getUserShops()
);

$this->paginate = array(
'conditions'=>$options['conditions'],
'joins'=>$options['joins'],
'order'=>'Transaction.unix_time_stamp DESC',
//Commented
'group'=>'TransactionDetail.transaction_id',
);

This code works as I have described above but with the group option
uncommented (returns the correct number of Transaction records),
pagination breaks once again and the pagination links are disabled. I
was wondering whether there is a way around this, maybe a custom way
of doing pagination where I can set variables such as number of
records because as much as there is a count query run to find the
number of records, this is not being passed to the pagination
function.

Kind regards.

On Feb 1, 2:57 pm, Jeremy Burns | Class Outfit
<jeremybu...@classoutfit.com> wrote:
> This is (regrettably) how it is supposed to work as it is using outer joins. To achieve what you want to do you need to use the 'joins' options, where you can specify inner joins, which will filter your results correctly.http://book.cakephp.org/view/1047/Joining-tables
>
> Jeremy Burns
> Class Outfit
>
> jeremybu...@classoutfit.comhttp://www.classoutfit.com
>
> On 1 Feb 2011, at 11:18, Name256 wrote:
>
>
>
>
>
>
>
> > Hello,
>
> > I have been trying out the containable behaviour and it seems that the
> > applied filter on "contained" models only apply to them and not the
> > parent model.
>
> > For example I have a model Transaction and TransactionDetail where
> > Transaction hasMany TransactionDetail. If I apply a condition on the
> > TransactionDetail, the result still returns all the transactions. I
> > did an override of the afterFind method to further filter the data but
> > it ended up breaking pagination in the view.
>
> > I have had a look at the many posts where containable has been
> > discussed but I'm at a loss as to whether there is another way of
> > retrieving paginated data with all conditions applying for all models
> > present.
>
> > Kindly assist.
>
> > --
> > Our newest site for the community: CakePHP Video Tutorialshttp://tv.cakephp.org
> > Check out the new CakePHP Questions sitehttp://ask.cakephp.organd help others with their CakePHP related questions.
>
> > To unsubscribe from this group, send email to
> > cake-php+unsubscribe@googlegroups.com For more options, visit this group athttp://groups.google.com/group/cake-php

--
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
cake-php+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/cake-php

No comments: