Skip to content

Instantly share code, notes, and snippets.

@deepak-cotocus
Last active September 15, 2020 05:31
Show Gist options
  • Save deepak-cotocus/af527c035ef86b2a0cf1ddd4b87d79a6 to your computer and use it in GitHub Desktop.
Save deepak-cotocus/af527c035ef86b2a0cf1ddd4b87d79a6 to your computer and use it in GitHub Desktop.
How to Create Laravel Eloquent API Resources to convert model collections into JSON(Part 5).

Resource Collection

Introduction:

In addition to generating resources that transform individual models, you may generate resources that are responsible for transforming collections of models. This allows your response to include links and other meta information that is relevant to an entire collection of a given resource.

Collection resources extend the Illuminate\Http\Resources\Json\ResourceCollection class:

In previoes lessons we have seen how to generate json data of single object. Now we are going to see how to generatet Collection of Objects.

STEP 1: Command to generate collectionResource class.

php artisan make:resource UserCollection

Or

php artisan make:resource User --Collection

collecton-resource

  • Now we anve another resource UserCollection

collection-resource1

STEP 2:

Keep <your-app>\app\Http\Resources\User as it is.

<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\Resource;
use Illuminate\Support\Facades\Log;

class User extends Resource
{
    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function toArray($request)
    {
        return [
            
            'name' => $this->name,
            'email' => $this->email,
            'profile' => url('/user/'. $this->id . '/'),
     
        ];
    }
}
 

STEP 3:

Open <your-app>\app\Http\Resources\UserCollection.

<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\ResourceCollection;

class UserCollection extends ResourceCollection
{
    /**
     * Transform the resource collection into an array.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function toArray($request)
    {
        return parent::toArray($request);
    }
}

 

STEP 2: keep below below Changes in web.php file as it was before

<?php

use App\User;
use App\Http\Resources\User as UserResource;
use App\Http\Resources\UserCollection;


Route::get('/', function () {
    return view('welcome');
});

Route::get('/json', function () {

	$users = User::all();
    return new UserCollection($users);
});

STEP 3: All set to go

  • Here my Application is 'demo-app' and its virtual host url is http://demo-app/. So i will open browser and hit: http://demo-app/json and see tha magic of LARAVEL RESOURCES

collection-resource2

My basic recommendation for learning : Eloquent: API Resources

Thanks

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment