🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 系列化json ### 介绍 构建JSON API时,通常需要将模型和关系转换为数组或JSON。模型包括进行这些转换以及控制序列化中包含哪些属性的便捷方法。 ### [](https://octobercms.com/docs/database/serialization#basic-usage)基本用法 #### 将模型转换为数组 要将模型及其加载的[关系](https://octobercms.com/docs/database/relations)转换为数组,可以使用`toArray`方法。此方法是递归的,因此所有属性和所有关系(包括关系的关系)都将转换为数组: ~~~ $user = User::with('roles')->first(); return $user->toArray(); ~~~ 您也可以将[集合](https://octobercms.com/docs/database/collections)转换为数组: ~~~ $users = User::all(); return $users->toArray(); ~~~ #### 将模型转换为JSON 要将模型转换为JSON,可以使用`toJson`方法。像一样`toArray`,该`toJson`方法是递归的,因此所有属性和关系都将转换为JSON: ~~~ $user = User::find(1); return $user->toJson(); ~~~ 或者,您可以将模型或集合转换为字符串,这将自动调用该`toJson`方法: ~~~ $user = User::find(1); return (string) $user; ~~~ 由于模型和集合在转换为字符串时会转换为JSON,因此您可以直接从应用程序的路由,AJAX处理程序或控制器返回Model对象: ~~~ Route::get('users', function () { return User::all(); }); ~~~ ### [](https://octobercms.com/docs/database/serialization#hiding-attributes-from-json)从JSON隐藏属性 有时您可能希望限制模型数组或JSON表示形式中包含的属性(例如密码)。为此,`$hidden`向模型添加属性定义: ~~~ <?php namespace Acme\Blog\Models; use Model; class User extends Model { /** * The attributes that should be hidden for arrays. * * @var array */ protected $hidden = ['password']; } ~~~ 或者,您可以使用`$visible`属性定义应包含在模型的数组和JSON表示形式中的属性白名单: ~~~ class User extends Model { /** * The attributes that should be visible in arrays. * * @var array */ protected $visible = ['first_name', 'last_name']; } ~~~ ### [](https://octobercms.com/docs/database/serialization#appending-values-to-json)将值附加到JSON 有时,您可能需要添加数据库中没有对应列的数组属性。为此,首先为该值定义一个[访问器](https://octobercms.com/docs/database/mutators): ~~~ class User extends Model { /** * Get the administrator flag for the user. * * @return bool */ public function getIsAdminAttribute() { return $this->attributes['admin'] == 'yes'; } } ~~~ 创建访问器后,将属性名称添加到`appends`模型的属性中: ~~~ class User extends Model { /** * The accessors to append to the model's array form. * * @var array */ protected $appends = ['is_admin']; } ~~~ 将属性添加到`appends`列表后,它将同时包含在模型的数组和JSON表单中。`appends`数组中的属性也将遵循模型上配置的`visible`和`hidden`设置。