Paste the full code where you see it being called twice, please. I will also check with my own code
On Wednesday, April 16, 2014 2:23:54 PM UTC+2, bato wrote: > > ok it works! > > To me remain a mistery why using first() the callback in $results->map() > is called twice while not using first is called once. > > Could it be a bug? > > > 2014-04-16 13:11 GMT+02:00 José Lorenzo <[email protected]>: > >> 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 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.
