After experimenting for a while, I discovered that Cake actually calls my 
afterFind function twice for each matching row, but with different data 
formats -

The first time in the form - array(array('Group' => ('id' => ...)))
The second time in the form - array('id' => ... , 'Town' => array('id' => 
...)) so I do get the Town data. It is rather unfortunate that the data 
formats are different as it makes the afterFind code rather ugly.

Mark

On Monday, November 19, 2012 5:37:59 PM UTC-5, Mark Wratten wrote:
>
> We are using Cake 2.2.2 and we have the following tables -
>
> Article -> id, group_id, town_id, ...
> Group -> id, town_id, ...
> Town -> id, ...
>
> The Article and Group tables need to modify their data with data from the 
> Town table, so in each of those Models we have an afterFind callback that 
> checks for the presence of Town data in the results and if found does the 
> updates.
>
> This works fine for the primary model. However Group is also an associated 
> model to the Article table, so if I execute the following find function -
>
> $this->Article->find('all', array('contain' => array('Town', 'Group', 
> 'Group.Town')));
>
> Cake does run the query and assembles the data correctly, but the Group 
> afterFind callback is called without the associated Town data, even though 
> it is part of the query. As far as I can tell, the Group->afterFind is 
> called before the queries for its associated tables are run.
>
> I'm looking for an elegant way to do this within the model, rather than 
> resorting to putting the code in the controller.
>
> Thanks in advance
>
> Mark
>

-- 
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 post to this group, send email to cake-php@googlegroups.com.
To unsubscribe from this group, send email to 
cake-php+unsubscr...@googlegroups.com.
Visit this group at http://groups.google.com/group/cake-php?hl=en.


Reply via email to