web-dev-qa-db-fra.com

Renvoyer un modèle Eloquent en JSON dans Laravel 4

Comment renvoyer un modèle Eloquent au navigateur en tant que JSON? Quelle est la différence entre les deux méthodes ci-dessous? Les deux semblent fonctionner.

# 1:

return Response::json($user->toArray());

# 2:

return $user->toJson();
37
Nyxynyx

Les données réelles envoyées sont les mêmes, cependant ...

# 1 envoie Content-Type:application/json au navigateur

# 2 envoie Content-Type:text/html

# 1 est plus correct mais cela dépend de votre Javascript, voir: Quel est le type de contenu JSON correct?

Cependant, il est beaucoup plus simple de simplement renvoyer le modèle. Il est automatiquement renvoyé en JSON et le Content-Type est correctement défini:

return $model;
34
Brian Ortiz

Dans # 1, vous convertissez d'abord votre Eloquent en un tableau, puis vous le convertissez en JSON, ce qui semble un peu redondant.

Dans cet esprit, j'irais avec # 2 si vous renvoyez le JSON à l'appelant.

Notez également qu'en L4, chaque fois qu'un modèle Eloquent est converti en chaîne, il sera automatiquement converti en JSON. Par conséquent, vous pouvez faire comme dans cet exemple de la documentation pour renvoyer les données JSON directement à partir de votre itinéraire:

Route::get('users', function()
{
    return User::all();
});

Pour plus d'informations, voir http://four.laravel.com/docs/eloquent#converting-to-arrays-or-json

10
Micael Gustafsson

Response::json($someArray) est un moyen générique de renvoyer des données JSON.

return $model->toJson() est spécifique au retour d'un modèle en JSON. Ce serait mon approche préférée lorsque je travaille avec un modèle Eloquent.

9
juco