Containable works by running lots of queries and then merging the data
into a cake-like array for you.  As such you cannot throw in
conditions on deeply associated models and expect it to limit the
results.  You need to force joins so you can specify the conditions
you want.

To limit the amount of ad-hoc joins you will have to make I would run
this find on the Bill model as that is directly related to Account and
BillResource.  However, we need to change the Bill hasMany
BillResource to Bill hasOne BillResource, so it runs one query using
all 3 tables, using unbindModel and bindModel.

If running this from the Client controller, add the following to the
relevant action:

$this->Client->Account->Bill-
>unbindModel(array('hasMany'=>array('BillResource')));
$this->Client->Account->Bill-
>bindModel(array('hasOne'=>array('BillResource')));
$this->Client->Account->Bill->find('all', array(
  'conditions'=>array(
    'Account.client_id'=>$client_id,
    'BillResource.resource_type_id'=>$resource_type_id
  ),
  'contain'=>array(
    'Account'=>array('Client'),
    'BillResource'=>array('ResourceType')
  )
));

If paginating this data add a false parameter to the unbind and bind
calls as follows (makes the change last the whole http request rather
than just one find call):

$this->Client->Account->Bill-
>unbindModel(array('hasMany'=>array('BillResource')), false);
$this->Client->Account->Bill-
>bindModel(array('hasOne'=>array('BillResource')), false);

I have not tested any of this, so apologies for any typos!

HTH

Paul

Check out the new CakePHP Questions site http://cakeqs.org and help others with 
their CakePHP related questions.

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

To unsubscribe from this group, send email to 
cake-php+unsubscribegooglegroups.com or reply to this email with the words 
"REMOVE ME" as the subject.

Reply via email to