当你在创建 JSON API 的时候,经常会需要将模型和关联转换成数组或 JSON。

Eloquent 提供了一些便捷的方法来让我们可以完成这些转换,以及控制哪些属性需要被包括在序列化中。

序列化成数组

如果要将模型还有其加载的 关联 转换成一个数组,则可以使用 toArray 方法。

这个方法是递归的,因此,所有属性和关联(包含关联中的关联)都会被转换成数组:

    $user = App\User::with('roles')->first();    
    return $user->toArray();

你也可以将整个 集合 转换成数组:

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

序列化成 JSON

如果要将模型转换成 JSON,则可以使用 toJson 方法。如同 toArray 方法一样,toJson 方法也是递归的。

因此,所有的属性以及关联都会被转换成 JSON:

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

或者,你也可以强制把一个模型或集合转型成一个字符串,它将会自动调用 toJson 方法:

    $user = App\User::find(1);    
    return (string) $user;

当模型或集合被转型成字符串时,模型或集合便会被转换成 JSON 格式,因此你可以直接从应用程序的路由或者控制器中返回 Eloquent 对象:

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