Damn it a typo:


The "$primary = false" query (an intermediary hasMany query result) looks like 
this:


array(
        (int) 0 => array(
                'HasManyAssoc' => array(
                        'id' => '1'
                )
        ),

        ...
)


(The same as all other query result formats).

Please just look if in doubt - It's so much faster/easier.

AD

On Friday, 28 June 2013 12:59:57 UTC+2, AD7six wrote:
>
>
>
> On Thursday, 27 June 2013 22:25:02 UTC+2, Vanja Dizdarević wrote:
>>
>> As "solved" in the thread I linked to in the original post: 
>
>
>>          public function afterFind($results, $primary = false) { 
>>                 if (method_exists($this, 'doAfterFind')) { 
>>                           if ($primary) { 
>>                                    foreach ($results as $key => $val) { 
>>                                             if 
>> (isset($val[$this->alias])) { 
>>                                              
>>         $results[$key][$this->alias] = 
>> $this->doAfterFind($results[$key][$this->alias]); 
>>                                                 } 
>>                                       } 
>>                           } else { 
>>                                   if (isset($results[$this->primaryKey])) 
>> { 
>>                                            $results = 
>> $this->doAfterFind($results); 
>>                                    } else { 
>>                                             foreach ($results as $key => 
>> $val) { 
>>                                                      if 
>> (isset($val[$this->alias])) { 
>>                                                               if 
>> (isset($val[$this->alias][$this->primaryKey])) { 
>>                                                                
>>         $results[$key][$this->alias] = 
>> $this->doAfterFind($results[$key][$this->alias]); 
>>                                                               } else { 
>>                                                                
>>         foreach ($results[$key][$this->alias] as $key2=> $val2) { 
>>                                                                         
>>         $results[$key][$this->alias][$key2] = 
>> $this->doAfterFind($results[$key][$this->alias][$key2]); 
>>                                                                          
>>      } 
>>                                                                     } 
>>                                                           } 
>>                                                 } 
>>                                       } 
>>                            } 
>>                 } 
>>                  return $results; 
>>          } 
>> }
>>
>
> This code looks to be way over complex, possibly a testament to the 
> none-value of reading 5 year old posts on a google group for a framework 
> which is actively maintained and applying found advice blindly.
>
>
>> This supposedly applies the same "doAfterFind" method to all records, 
>> regardless of the passed $results array format, taking into account all 
>> possible associations of a primary model to this model.
>>
>> The actual questions is: What are all array formats we can expect in the 
>> $results array?
>>
>
> Does that mean you still haven't looked =)?
>
> a count looks like this:
>
> array(
>       (int) 0 => array(
>               (int) 0 => array(
>                       'count' => '9'
>               )
>       )
> )
>
>
> a find first looks like this:
>
>
> array(
>       (int) 0 => array(
>               'Alias' => array(
>                       'id' => '1'
>               ),
>               'HasManyAssoc' => array(
>                       (int) 0 => array(
>                               'id' => '1'
>                       )
>               )
>       )
> )
>
>
> a find all looks like this:
>
> array(
>
>       (int) 0 => array(
>               'Alias' => array(
>                       'id' => '1'
>               ),
>               'HasManyAssoc' => array(
>                       (int) 0 => array(
>                               'id' => '1'
>                       )
>               )
>       ),
>
>         ...
> )
>
>
> The "$primary = false" query (an intermediary hasMany query result) looks 
> like this:
>
>
> array(
>       (int) 0 => array(
>               'HasManyAssoc' => array(
>                       (int) 0 => array(
>                               'id' => '1'
>                       )
>               )
>       ),
>
>         ...
> )
>
>
> There's a very simple pattern there:
>
>
> array($int => array('alias' => array('field' => $value)));
>
>
> With a simple exception for hasMany associations, when included in the 
> primary query's results, all primary finds *always *have the same results 
> format.
>
>
>
>> To quote the docs:
>>  If a model is queried as an association the format of$results can 
>> differ; instead of the result you would normally get from a find operation, 
>> you may get this:
>>
>> $results = array(
>>     'field_1' => 'value1',
>>     'field_2' => 'value2');
>>
>>  
>
>> So, if I wish the afterFind to find the data in the results array, I have 
>> to test the format of the array or can I rely on $primary value?
>>
>
> I .. think you should stop wasting your time and *ask* how to do 
> something specifically, from the look of your afterFind method, you're 
> writing some sort of appmodel method that is converting/processing all 
> data. Right now it's going to run on all queries, loop on all keys and 
> therefore probably affect performance even if it's doing what you want it 
> to do. You're probably better of writing either a recursive method to 
> operate on the whole results format or a much narrower scope method that *
> just* does what you specifically want.
>
> *What is your afterFind method trying to do?*
> *
> *
> AD
>

-- 
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.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to