X

Comment renvoyer automatiquement JSON pour Laravel Eloquent


Lorsque vous travaillez avec des API, vous devez souvent renvoyer une réponse Eloquent au format JSON.

Par défaut, Laravel transforme la réponse en JSON si vous renvoyez simplement un modèle ou une collection éloquente.

Exemple avec Eloquent Collection

// Controller:

public function index()

{

return User::all();

}

Reviendra :

[

{

"id": 1,

"name": "Prof. Marcos Ratke",

"email": "providenci.hane@example.org",

"email_verified_at": "2023-01-04T12:26:19.000000Z",

"created_at": "2023-01-04T12:26:20.000000Z",

"updated_at": "2023-01-04T12:26:20.000000Z"

},

{

"id": 2,

"name": "Sincere Casper",

"email": "jaylin33@example.com",

"email_verified_at": "2023-01-04T12:26:19.000000Z",

"created_at": "2023-01-04T12:26:20.000000Z",

"updated_at": "2023-01-04T12:26:20.000000Z"

},

 

// ... other users

]


Exemple avec pagination

// Controller:

public function index()

{

return User::paginate();

}

Reviendra :

{

"current_page": 1,

"data": [

{

"id": 1,

"name": "Prof. Marcos Ratke",

"email": "providenci.hane@example.org",

"email_verified_at": "2023-01-04T12:26:19.000000Z",

"created_at": "2023-01-04T12:26:20.000000Z",

"updated_at": "2023-01-04T12:26:20.000000Z"

},

{

"id": 2,

"name": "Sincere Casper",

"email": "jaylin33@example.com",

"email_verified_at": "2023-01-04T12:26:19.000000Z",

"created_at": "2023-01-04T12:26:20.000000Z",

"updated_at": "2023-01-04T12:26:20.000000Z"

},

 

// ... other users

],

"first_page_url": "http://laravel.test/api/users?page=1",

"from": 1,

"last_page": 2,

"last_page_url": "http://laravel.test/api/users?page=2",

"links": [

{

"url": null,

"label": "« Previous",

"active": false

},

{

"url": "http://laravel.test/api/users?page=1",

"label": "1",

"active": true

},

{

"url": "http://laravel.test/api/users?page=2",

"label": "2",

"active": false

},

{

"url": "http://laravel.test/api/users?page=2",

"label": "Next »",

"active": false

}

],

"next_page_url": "http://laravel.test/api/users?page=2",

"path": "http://laravel.test/api/users",

"per_page": 15,

"prev_page_url": null,

"to": 15,

"total": 20

}

Comme vous pouvez le voir, les utilisateurs sont enveloppés dans dataet le JSON principal contient plus de données sur les pages.


Exemple avec un seul modèle

// Controller:

public function show(User $user)

{

return $user;

}

Reviendra :

{

"id": 1,

"name": "Prof. Marcos Ratke",

"email": "providenci.hane@example.org",

"email_verified_at": "2023-01-04T12:26:19.000000Z",

"created_at": "2023-01-04T12:26:20.000000Z",

"updated_at": "2023-01-04T12:26:20.000000Z"

}


Comment ça marche?

Citant les documents officiels de Laravel sur la sérialisation :

Étant donné que les modèles et les collections sont convertis en JSON lorsqu’ils sont convertis en chaîne, vous pouvez renvoyer des objets Eloquent directement à partir des routes ou des contrôleurs de votre application. Laravel sérialisera automatiquement vos modèles et collections Eloquent en JSON lorsqu’ils seront renvoyés par des routes ou des contrôleurs :


Renvoyer manuellement JSON

Si vous souhaitez renvoyer le JSON à partir d’une autre structure non éloquente, vous pouvez le spécifier avec return response()->json()en passant tableau en paramètre :

// Controller:

public function update(UpdateUserRequest $request, User $user)

{

$user->update($request->validated());

 

return response()->json(['success' => true]);

}

Reviendra :

{

"success": true

}