Eloquent: Serialization

    When building JSON APIs, you will often need to convert your models and relationships to arrays or JSON. Eloquent includes convenient methods for making these conversions, as well as controlling which attributes are included in your serializations.

    To convert a model and its loaded to an array, you should use the method. This method is recursive, so all attributes and all relations (including the relations of relations) will be converted to arrays:

    You may also convert entire collections of models to arrays:

    1. $users = App\User::all();
    2. return $users->toArray();

    Serializing To JSON

    To convert a model to JSON, you should use the toJson method. Like toArray, the toJson method is recursive, so all attributes and relations will be converted to JSON:

    1. $user = App\User::find(1);
    2. return $user->toJson();

    Alternatively, you may cast a model or collection to a string, which will automatically call the toJson method on the model or collection:

    Since models and collections are converted to JSON when cast to a string, you can return Eloquent objects directly from your application's routes or controllers:

    1. Route::get('users', function () {
    2. return App\User::all();
    3. });

    Sometimes you may wish to limit the attributes, such as passwords, that are included in your model's array or JSON representation. To do so, add a $hidden property to your model:

    1. <?php
    2. namespace App;
    3. use Illuminate\Database\Eloquent\Model;
    4. class User extends Model
    5. {
    6. /**
    7. * The attributes that should be hidden for arrays.
    8. *
    9. * @var array
    10. */
    11. }

    Alternatively, you may use the visible property to define a white-list of attributes that should be included in your model's array and JSON representation. All other attributes will be hidden when the model is converted to an array or JSON:

    Temporarily Modifying Attribute Visibility

    If you would like to make some typically hidden attributes visible on a given model instance, you may use the makeVisible method. The makeVisible method returns the model instance for convenient method chaining:

    1. return $user->makeVisible('attribute')->toArray();

    Likewise, if you would like to make some typically visible attributes hidden on a given model instance, you may use the makeHidden method.

    1. return $user->makeHidden('attribute')->toArray();

    Occasionally, when casting models to an array or JSON, you may wish to add attributes that do not have a corresponding column in your database. To do so, first define an for the value:

    1. <?php
    2. namespace App;
    3. use Illuminate\Database\Eloquent\Model;
    4. class User extends Model
    5. {
    6. /**
    7. * The accessors to append to the model's array form.
    8. *
    9. * @var array
    10. */
    11. protected $appends = ['is_admin'];

    Once the attribute has been added to the appends list, it will be included in both the model's array and JSON representations. Attributes in the appends array will also respect the and hidden settings configured on the model.