datalore
datalore

Reputation: 327

Cakephp 3: Modifying Results from the database

In my database there is a content table and when fetching data from this table I would like to append field url to the results, which is based on slug field which is contained in the table. Anyway, I have seen a way to do this in the previous versions of cakephp using behavior for the model of this table and then modifying results in afterFind callback in the behavior class. But in version 3 there is no afterFind callback, and they recommend using mapReduce() method instead in the manual, but this method is poorly explained in the manual and I cant figure out how to achieve this using mapReduce().

Upvotes: 0

Views: 632

Answers (1)

datalore
datalore

Reputation: 327

After little bit of research I realized that the best way to append the url field field to find results is using formatResults method, So this is what I did in my finders:

$query->formatResults(function (\Cake\Datasource\ResultSetInterface $results) {
               return $results->map(function ($row) {
                   $row['url'] = array(
                       'controller' => 'content',
                       'action' => 'view',
                       $row['slug'],
                       $row['content_type']['alias']
                   );
                   return $row;
               });
           });

Upvotes: 1

Related Questions