Model Serialization 模块序列化
文章目录
- Model Serialization 模块序列化
-
- Introduction 介绍
- Basic usage 基本用法
-
-
- Converting a model to an array 模块转换成一个数组
- Converting a model to JSON 转换json
-
- Hiding attributes from JSON 从JSON隐藏属性
- Appending values to JSON 值附加到JSON
Introduction 介绍
当构建JSON APIs时,你将常常需要把models和关系转换成数组或json
模型包括转换的便捷方法,以及控制序列化时包含哪些属性
Basic usage 基本用法
Converting a model to an array 模块转换成一个数组
要将模型及其加载的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
设置。