栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > PHP > php开源框架 > Laravel

序列化 - laravel 5.3 中文文档

Laravel 更新时间:发布时间: 百科书网 趣学号

# Eloquent: 序列化

- [简介](#introduction)
- [序列化模型 & 集合](#serializing-models-and-collections)
- [序列化成数组](#serializing-to-arrays)
- [序列化成 JSON](#serializing-to-json)
- [隐藏来自 JSON 的属性](#hiding-attributes-from-json)
- [添加参数到 JSON 中](#appending-values-to-json)


## 简介

当你在创建 JSON API 的时候,经常会需要将模型和关联转换成数组或 JSON。Eloquent 提供了一些便捷的方法来让我们可以完成这些转换,以及控制哪些属性需要被包括在序列化中。


## 序列化模型 & 集合


### 序列化成数组

如果要将模型还有其加载的 [关联](/docs/{{version}}/eloquent-relationships) 转换成一个数组,则可以使用 toArray 方法。这个方法是递归的,因此,所有属性和关联(包含关联中的关联)都会被转换成数组:

$user = AppUser::with('roles')->first();

return $user->toArray();

你也可以将整个 [集合](/docs/{{version}}/eloquent-collections) 转换成数组:

$users = AppUser::all();

return $users->toArray();


### 序列化成 JSON

如果要将模型转换成 JSON,则可以使用 `toJson` 方法。如同 `toArray` 方法一样,`toJson` 方法也是递归的。因此,所有的属性以及关联都会被转换成 JSON:

$user = AppUser::find(1);

return $user->toJson();

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

$user = AppUser::find(1);

return (string) $user;

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

Route::get('users', function () {
return AppUser::all();
});


## 隐藏来自 JSON 的属性

有时候你可能会想要限制包含在模型数组或 JSON 表示中的属性,比如说密码。则可以通过在模型中增加 `$hidden` 属性定义来实现:



namespace App;

use IlluminateDatabaseEloquentModel;

class User extends Model
{

protected $hidden = ['password'];
}

> **注意:**当你要对关联进行隐藏时,需使用关联的 **方法** 名称,而不是它的动态属性名称。

另外,你也可以使用 `visible` 属性来定义应该包含在你的模型数组和 JSON 表示中的属性白名单。白名单外的其他属性将隐藏,不会出现在转换后的数组或 JSON 中:


namespace App;

use IlluminateDatabaseEloquentModel;

class User extends Model
{

protected $visible = ['first_name', 'last_name'];
}

#### 临时修改属性的可见度

你可以在模型实例后使用 `makeVisible` 方法来显示通常隐藏的属性,且为了便于使用,`makeVisible` 方法会返回一个模型实例:

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

相应的,你可以在模型实例后使用 `makeHidden ` 方法来隐藏通常显示的属性:

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


## 添加参数到 JSON 中

有时候,在转换模型到 数组 或 JSON 时,你希望添加一个在数据库中没有对应字段的属性。首先你需要为这个值定义一个 [访问器](/docs/{{version}}/eloquent-mutators) :


namespace App;

use IlluminateDatabaseEloquentModel;

class User extends Model
{

public function getIsAdminAttribute()
{
return $this->attributes['admin'] == 'yes';
}
}

访问器创建成功后,只需添加该属性到改模型的 `appends` 属性中。注意,属性名称通常遵循 "[Snake Case](https://en.wikipedia.org/wiki/Snake_case)" 的命名方式,即是访问器的名称是基于 "Camel Case" 的命名方式。


namespace App;

use IlluminateDatabaseEloquentModel;

class User extends Model
{

protected $appends = ['is_admin'];
}

一旦属性被添加到 `appends` 清单,便会将模型中的数组和 JSON 这两种形式都包含进去。在 `appends` 数组中的属性也遵循模型中 `visible` 和 `hidden` 设置。


转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/214124.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号