Try this

public findFlat($query, $options = []) {
return $query->formatResults(function($results, $query) {
return $results->map(function($row) {
if ($row->content) {
$row->set($row->content->toArray(), ['guard' => false]);
$row->unsetProperty('content');
}
return $row;
});
});
}

$row = $table->find('flat')->first();


On Tuesday, April 15, 2014 10:04:25 AM UTC+2, bato wrote:
>
> uhm...
>
> maybe I'm wrong to use map() function... 
>
> return $results->map(function($row) {
>                 foreach ($row['content']->toArray() as $key => $value) {
>                     $row[$key] = $value;
>                 }
>                 unset($row['content']);
>                 return $row;
>             });
>
>
> In my db I have only one row. 
> When I find all results the callback inside map() is called one time. 
> If I add first() to chain then it's called two times and the second time 
> $row['content'] is undefined because I unset it before so thrown fatal 
> error. Why is it called two times?
>
> Suggestions?
>
>
> 2014-04-15 9:22 GMT+02:00 bato <[email protected]>:
>
>> Sure,
>>
>> I'm trying to add 'content' properties to main Entity properties (it's an 
>> exercise to collpase entities properties in an array)
>>
>> [
>> (int) 0 => object(App\Model\Entity\Object) {
>>
>> 'new' => false,
>> 'accessible' => [
>>  '*' => true
>> ],
>>  'properties' => [
>> 'id' => (int) 5,
>>  'object_type_id' => (int) 12,
>> 'status' => 'on',
>>  'created' => object(DateTime) {
>> date => '2014-03-07 09:21:29'
>>  timezone_type => (int) 3
>> timezone => 'Europe/Rome'
>>  },
>> 'modified' => object(DateTime) {
>>  date => '2014-04-07 23:32:48'
>> timezone_type => (int) 3
>>  timezone => 'Europe/Rome'
>> },
>>  'start_date' => null,
>> 'end_date' => null,
>>  'subject' => null,
>> 'abstract' => null,
>>  'body' => null,
>> 'duration' => null
>>  ],
>> 'dirty' => [
>>  'id' => true,
>> 'start_date' => true,
>>  'end_date' => true,
>> 'subject' => true,
>>  'abstract' => true,
>> 'body' => true,
>>  'duration' => true
>> ],
>>  'virtual' => [],
>> 'errors' => [],
>>  'repository' => 'ImageObjects'
>>  }
>> ]
>>
>> This is the results of find all. In 'dirty' key you can see the 'content' 
>> properties that I add to App\Model\Entity\Object properties.
>> I unset the 'content' key so it isn't show in the above array.
>>
>> I'm playing with ORM feature and I would want to know if formatResults is 
>> usable in query chain.
>>
>>
>> Il giorno lunedì 14 aprile 2014 11:40:53 UTC+2, José Lorenzo ha scritto:
>>>
>>> Can you explain what you are trying to do? I'm not sure I get it from 
>>> your code example.
>>>
>>> On Monday, April 14, 2014 11:31:42 AM UTC+2, bato wrote:
>>>>
>>>> Hi,
>>>>
>>>> I'm trying to figure out if it's possible to use formatResults in 
>>>> custom finder methods to use ORM chain. I have seen in docs the example 
>>>> with mapper reducer.
>>>>
>>>> In my table object i have
>>>>
>>>> public findFlat($query, $options = []) {
>>>>        return $query->formatResults(function($results, $query) {
>>>>             return $results->map(function($row) {
>>>>                 foreach ($row['content']->toArray() as $key => $value) {
>>>>                     $row[$key] = $value;
>>>>                 }
>>>>                 unset($row['content']);
>>>>                 return $row;
>>>>             });
>>>>         });
>>>> }
>>>>
>>>> then in my controller I have
>>>>
>>>> $images = TableRegistry::get('ImageObjects');
>>>> $result = $images->find('flat');
>>>> $result->contain(['Contents', 'Streams']);
>>>> debug($result->toArray());
>>>>
>>>> In this way it works but if I add first()
>>>>
>>>> $result->first();
>>>>
>>>> then I obtain a fatal error in findFlat() method
>>>>
>>>> Error: Call to a member function toArray() on a non-object
>>>>
>>>> Any help? 
>>>> Am I using wrong formatResults()? Is it possible to chain only mapper 
>>>> reducer?
>>>>
>>>> thanks
>>>> alberto
>>>>
>>>>  -- 
>> 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 a topic in the 
>> Google Groups "CakePHP" group.
>> To unsubscribe from this topic, visit 
>> https://groups.google.com/d/topic/cake-php/djk1Ip6_Ca4/unsubscribe.
>> To unsubscribe from this group and all its topics, 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/d/optout.
>>
>
>
>
> -- 
> ------ bato ------- 
>

-- 
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/d/optout.

Reply via email to