Search code examples
laravellaravel-resource

How in laravel resources to add order field?


In laravel 7 app I use collections in controller:

return (new TaskCollection($tasks));

and app/Http/Resources/TaskCollection.php :

<?php

namespace App\Http\Resources;
use App\Facades\MyFuncsClass;
use App\Task;

use Illuminate\Http\Resources\Json\ResourceCollection;

class TaskCollection extends ResourceCollection
{
    public static $wrap = 'tasks';
    public function toArray($request)
    {
        return $this->collectResource($this->collection)->transform(static function (Task $task){
                return [
                    'id' => $task->id,
                    ....
                    'created_at' => $task->created_at,
                    'updated_at' => $task->updated_at,
                    'deleted_at' => $task->deleted_at,
                ];
            });

    }

    public function with($request)
    {
        return [
            'meta' => [
               ...
            ]
        ];
    }

}

I need to add order field(from 0 value) + 1 on next row. How can I do it?

Thanks!


Solution

  • Use map function:

    public function toArray($request)
    {
        $this->collection = $this->collection->map(function ($item, $key) {
            $item['order'] = $key;
            return $item;
        });
    
        return $this->collectResource($this->collection)->transform(static function (Task $task){
            return [
                'id' => $task->id,
                'order' => $task->order,
                    ....
                'created_at' => $task->created_at,
                'updated_at' => $task->updated_at,
                'deleted_at' => $task->deleted_at,
            ];
       });
    
    }