John thank you but it seems to not be working. I was mistaken that your
code is the same as my second example.
I have pasted your code:
when I input a date range of may27 - may 29, I am returned all associated
models and no filtering on the Attendance model.
You can see both Attendance records returned when only one should be.
SELECT `Attendance`.`id`, `Attendance`.`created`, `Attendance`.`modified`,
`Attendance`.`user_id`, `Attendance`.`program_id`, `Attendance`.`school_id`
FROM `attendances` AS `Attendance` WHERE `Attendance`.`school_id` = (2)
1] => Array
(
[User] => Array
(
[id] => 119
[group_id] => 2
[username] => mdonohue
[role] =>
[password] => 1234
[email] => [email protected]
[phone] => 631-252-5790
[cell_phone] =>
[active] => 1
[first_name] => Mikey
[last_name] => Donohue
[country] =>
[address] => 12324 any street
[city] => anycity
[state] => NY
[zip_code] => 11739
[created] => 2011-12-14 16:53:33
[modified] => 2011-12-14 21:45:24
[about_me] =>
[household_id] => 2
[is_head] => 1
[birthdate] => 1968-01-16
[activated] => 0
[activation_code] =>
[school_id] => 2
[name] =>
[uniform_size] => 5
[barcode] => 9375361
[show_profile] => 0
[photo] =>
[photo_dir] =>
[lead_source] =>
)
[Household] => Array
(
[id] => 2
[name] => mikey donohue
[payment_token] =>
[payment_type] =>
[school_id] => 2
)
[Attendance] => Array
(
[0] => Array
(
[id] => 185
[created] => 2013-05-27
[modified] => 2013-05-29 03:34:40
[user_id] => 119
[program_id] => 3
[school_id] => 2
)
[1] => Array
(
[id] => 186
[created] => 2013-05-26
[modified] => 2013-05-29 03:35:06
[user_id] => 119
[program_id] => 3
[school_id] => 2
)
)
[Photo] => Array
(
)
[News] => Array
(
)
[Eventregistration] => Array
(
)
[Rankforuser] => Array
(
[0] => Array
(
[id] => 524
[created] => 2013-05-28
[modified] => 2013-05-28
[user_id] => 119
[rank_id] => 28
[program_id] => 3
[school_id] => 2
[current_rank] => 1
)
)
[Testregistration] => Array
(
)
[Trial] => Array
(
[0] => Array
(
[id] => 32
[date] => 2012-01-15 09:35:00
[reminder] => 1
[reminder_date] => 2011-12-31 09:35:00
[message] =>
[created] => 2011-12-15 09:37:20
[modified] => 2011-12-15 09:49:08
[template_id] => 7
[staff_id] => 2
[user_id] => 119
[school_id] => 2
)
)
[Usermembership] => Array
(
[0] => Array
(
[id] => 314
[start_date] => 2013-06-01
[end_date] => 2015-06-01
[created] => 2013-05-28 19:35:19
[modified] => 2013-05-28 19:35:19
[status] => 1
[user_id] => 119
[program_id] => 3
[school_id] => 2
[downpayment] => 199
[downpayment_due] => 2013-06-01
[installment_number] => 24
[installment_payment] => 150
[installment_date] => 2013-06-01
[total_due] => 3900
)
)
[Bill] => Array
(
[0] => Array
(
[id] => 1912
[due_date] => 2013-06-01
[description] => Membership 1/24
[auto_pay] => 1
[amount] => 150
[amount_paid] => 0
[payment_type] =>
[payment_date] => 0000-00-00 00:00:00
[payment_status] => 0
[created] => 2013-05-28 19:35:19
[user_id] => 119
[school_id] => 2
[eventregistration_id] => 0
[testregistration_id] => 0
[usermembership_id] => 314
)
If I do not apply the conditions to the User model the containable and
date work correctly but it returns all users with other school_id's
[4] => Array
(
[User] => Array
(
[id] => 119
[group_id] => 2
[username] => mdonohue
[role] =>
[password] => 1234
[email] => [email protected]
[phone] => 631-252-5790
[cell_phone] =>
[active] => 1
[first_name] => Mikey
[last_name] => Donohue
[country] =>
[address] => 12324 any street
[city] => anycity
[state] => NY
[zip_code] => 11739
[created] => 2011-12-14 16:53:33
[modified] => 2011-12-14 21:45:24
[about_me] =>
[household_id] => 2
[is_head] => 1
[birthdate] => 1968-01-16
[activated] => 0
[activation_code] =>
[school_id] => 2
[name] =>
[uniform_size] => 5
[barcode] => 9375361
[show_profile] => 0
[photo] =>
[photo_dir] =>
[lead_source] =>
)
[Attendance] => Array
(
[0] => Array
(
[id] => 185
[created] => 2013-05-27
[modified] => 2013-05-29 03:34:40
[user_id] => 119
[program_id] => 3
[school_id] => 2
)
)
[Usermembership] => Array
(
[0] => Array
(
[id] => 314
[start_date] => 2013-06-01
[end_date] => 2015-06-01
[created] => 2013-05-28 19:35:19
[modified] => 2013-05-28 19:35:19
[status] => 1
[user_id] => 119
[program_id] => 3
[school_id] => 2
[downpayment] => 199
[downpayment_due] => 2013-06-01
[installment_number] => 24
[installment_payment] => 150
[installment_date] => 2013-06-01
[total_due] => 3900
)
)
)
On Wed, May 29, 2013 at 2:27 PM, John <[email protected]> wrote:
> Are you sure you tried the code I proposed in my second message? If yes
> what is the error message or returned output like?
>
> Your first example in the first message is *different* to what I wrote.
> What you were doing is to *find all *users *then* use their IDs to return
> results from the other tables (this is how contain works). First you asked
> containable to apply it to Attendance then on Usermembership and finally
> to the User model which would need User to be connected to the User model.
> This of course is not the case, it was failing and it was telling you why.
>
>
> $this->User->find('all',
> array('contain' => array(
> 'Attendance' => array(
> 'conditions' => $cond
> ),
> 'Usermembership',
> 'User' => array(
> 'conditions' => $cond2)
> )
> )
> );
>
> On your second example you are using Model::find wrong. It is defined as
> find(string $type = 'first', array $params = array()) (notice only *two
> parameters*) but you called it as find('all', array(<whatever>),
> array(<whatever)). Of course it fails with three parameters (PHP should
> be telling you that).
>
> My code is telling cake to
> 1. Get the proper filtered users as 'conditions' => cond2 are applied to
> the User model
> 2. Use the IDs of those users to return "contained" data from the other
> associated models ('contain' => ...)
>
> If this is failing then your models are probably not properly associated
> or I'm overlooking something.
>
>
>
> On Wed, May 29, 2013 at 11:35 AM, John <[email protected]> wrote:
>>
>>> What are your model associations?
>>>
>>> Have you tried to break it down to one step at a time (no contained
>>> model then add one at a time) and have a look at the produced SQL?
>>>
>>> I usually blindly add a 'recursive' = -1 clause in all find options when
>>> I use containable to keep things simple (unless it is needed otherwise of
>>> course).
>>>
>>> If you can't get it to work with contain you can always use plain old
>>> SQL to get the proper results, no need to accept whatever cake is pulling
>>> out for you with its magic.
>>>
>>>
>>>
>>> On Wednesday, May 29, 2013 5:43:21 PM UTC+3, Robert Gravel wrote:
>>>
>>>> Hi John, This was the exact code i tried in my second example. putting
>>>> the condition for the current model seems to break the containable method
>>>> and then all related models are returned. also the date search within the
>>>> Attendance model also breaks.
>>>>
>>>> There must be a way here I am not seeing.
>>>>
>>>> I would hate to return all users and have to loop thru potentially
>>>> thousands to rebuild the array.
>>>>
>>>> Any other options?
>>>>
>>>> Robert
>>>>
>>>>
>>>> On Wed, May 29, 2013 at 6:25 AM, John <[email protected]> wrote:
>>>>
>>>>> The message is telling you what is wrong, you are asking containable
>>>>> to contain the starting Model again
>>>>>
>>>>> $users = $this->User->find('all',
>>>>> array(
>>>>> 'conditions' => $cond2
>>>>> ),
>>>>> * array(*
>>>>> 'contain' => array(
>>>>> 'Attendance' => array(
>>>>> 'conditions' => $cond
>>>>> ),
>>>>> 'Usermembership'
>>>>> )
>>>>> * )*
>>>>> );
>>>>>
>>>>> I think there's the problem, make your code like this:
>>>>>
>>>>> $users = $this->User->find('all',
>>>>> array(
>>>>> 'conditions' => $cond2,
>>>>>
>>>>> 'contain' => array(
>>>>> 'Attendance' => array(
>>>>> 'conditions' => $cond
>>>>> ),
>>>>> 'Usermembership'
>>>>> )
>>>>> * )*
>>>>> );
>>>>>
>>>>> I always indent arrays inside finds to the extremes, especially if
>>>>> something is wrong because it helps to understand hierarchy and nesting
>>>>> better. You can always compact it to a single line if you think it's
>>>>> better
>>>>> later
>>>>>
>>>>>
>>>>> On Wednesday, May 29, 2013 6:10:47 AM UTC+3, Robert Gravel wrote:
>>>>>>
>>>>>> Hi experts,
>>>>>>
>>>>>> I am having an issue with containable. I have no problems returning
>>>>>> the proper records for Attendance condition but the database call will
>>>>>> still return all users in database with empty attendance field.
>>>>>> I need to return only User.school_id that match admin's
>>>>>> $session_school_id
>>>>>>
>>>>>> tried this
>>>>>> $this->User->Behaviors->**attach****('Containable');
>>>>>> $from = $this->data['User']['start_**dat****e']['year'] . "-" .
>>>>>> $this->data['User']['start_**dat****e']['month'] . "-" .
>>>>>> $this->data['User']['start_**dat****e']['day'];
>>>>>> $to = $this->data['User']['end_date'******]['year'] . "-" .
>>>>>> $this->data['User']['end_date'******]['month'] . "-" .
>>>>>> $this->data['User']['end_date'******]['day'];
>>>>>> $cond = array('Attendance.created BETWEEN ? AND ?' => array($from,
>>>>>> $to), 'Attendance.school_id' => $session_school_id);
>>>>>> // return only school user
>>>>>> $cond2 = array('User.school_id' => $session_school_id);
>>>>>> $users = $this->User->find('all', array('contain' =>
>>>>>> array('Attendance' => array('conditions' => $cond), 'Usermembership',
>>>>>> 'User' => array('conditions' => $cond2) )));
>>>>>>
>>>>>> this gives me Warning (512): Model "User" is not associated with
>>>>>> model "User"
>>>>>>
>>>>>> and tried this
>>>>>>
>>>>>> $users = $this->User->find('all', array('conditions' => $cond2),
>>>>>> array('contain' => array('Attendance' => array('conditions' => $cond),
>>>>>> 'Usermembership' )));
>>>>>>
>>>>>> does not work either.
>>>>>>
>>>>>> cake 1.3
>>>>>> Thank you
>>>>>> Robert
>>>>>>
>>>>> --
>>>>> Like Us on FaceBook
>>>>> https://www.facebook.com/**CakeP**HP<https://www.facebook.com/CakePHP>
>>>>> Find us on Twitter http://twitter.com/CakePHP
>>>>>
>>>>> ---
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "CakePHP" group.
>>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>>> an email to cake-php+u...@**googlegroups.com**.
>>>>> To post to this group, send email to [email protected].
>>>>>
>>>>> Visit this group at
>>>>> http://groups.google.com/**group**/cake-php?hl=en<http://groups.google.com/group/cake-php?hl=en>
>>>>> .
>>>>> For more options, visit
>>>>> https://groups.google.com/**grou**ps/opt_out<https://groups.google.com/groups/opt_out>
>>>>> .
>>>>>
>>>>>
>>>>>
>>>>
>>>> --
>>> Like Us on FaceBook
>>> https://www.facebook.com/**CakePHP<https://www.facebook.com/CakePHP>
>>> Find us on Twitter http://twitter.com/CakePHP
>>>
>>> ---
>>> You received this message because you are subscribed to the Google
>>> Groups "CakePHP" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to cake-php+u...@**googlegroups.com.
>>> To post to this group, send email to [email protected].
>>> Visit this group at
>>> http://groups.google.com/**group/cake-php?hl=en<http://groups.google.com/group/cake-php?hl=en>
>>> .
>>> For more options, visit
>>> https://groups.google.com/**groups/opt_out<https://groups.google.com/groups/opt_out>
>>> .
>>>
>>>
>>>
>>
>> --
> Like Us on FaceBook https://www.facebook.com/CakePHP
> Find us on Twitter http://twitter.com/CakePHP
>
> ---
> You received this message because you are subscribed to the Google Groups
> "CakePHP" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/cake-php?hl=en.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
>
--
Like Us on FaceBook https://www.facebook.com/CakePHP
Find us on Twitter http://twitter.com/CakePHP
---
You received this message because you are subscribed to the Google Groups
"CakePHP" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/cake-php?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.