Model Serialization 模块序列化
- Introduction
- Basic usage
- Hiding attributes from JSON
- Appending values to JSON
Introduction 介绍
当构建JSON APIs时,你将常常需要把models和关系转换成数组或json
模型包括转换的便捷方法,以及控制序列化时包含哪些属性
Basic usage 基本用法
Converting a model to an array 模块转换成一个数组
To convert a model and its loaded relationships to an array, you may use the toArray
method. This method is recursive, so all attributes and all relations (including the relations of relations) will be converted to arrays:
要将模型及其加载的relationships转换为数组,可以使用 toArray
方法。
此方法是递归的,因此所有属性和所有关系(包括关系的关系)都将转换为数组:
$user = User::with('roles')->first();return $user->toArray();
也可以转换 collections 成 数组:
$users = User::all();return $users->toArray();
Converting a model to JSON 转换json
要将模型转换为JSON,可以使用toJson
方法。与 toArray
一样,toJson
方法是递归的,因此所有属性和关系都将转换为JSON:
$user = User::find(1);return $user->toJson();
或者,可以将模型或集合强制转换为字符串,字符串将自动调用 toJson
方法:
$user = User::find(1);return (string) $user;
由于模型和集合在转换为字符串时转换为JSON,因此可以直接从应用程序的路由、AJAX处理程序或控制器返回模型对象:
Route::get('users', function () {return User::all();
});
Hiding attributes from JSON 从JSON隐藏属性
有时你可能希望限制模型的数组或JSON表示中包含的属性,例如密码。为此,请将$hidden
属性定义添加到模型中:
<?php namespace Acme\Blog\Models;use Model;class User extends Model
{/*** 这个数组的属性应该隐藏** @var array*/protected $hidden = ['password'];
}
或者,您可以使用 $visible
属性定义一个白名单,这些属性应该包含在模型的数组和JSON表示中:
class User extends Model
{/*** 这个数组的属性应该显示** @var array*/protected $visible = ['first_name', 'last_name'];
}
Appending values to JSON 值附加到JSON
有时,您可能需要添加数据库中没有相应列的数组属性。为此,首先为值定义一个 访问器accessor
class User extends Model
{/*** 获取用户的管理员标志。** @return bool*/public function getIsAdminAttribute(){return $this->attributes['admin'] == 'yes';}
}
创建访问器后,将属性名添加到模型的 appends
属性中:
class User extends Model
{/*** .附加到模型的数组形式的访问器。** @var array*/protected $appends = ['is_admin'];
}
一旦属性被添加到 appends
列表中,它将同时包含在模型的数组和JSON表单中。 appends
数组中的属性还将遵循模型上配置的 visible
和hidden
设置。