当前位置: 代码迷 >> 综合 >> October cms-Backend (数据库-序列化)
  详细解决方案

October cms-Backend (数据库-序列化)

热度:13   发布时间:2024-02-08 16:30:12.0

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 数组中的属性还将遵循模型上配置的 visiblehidden 设置。

  相关解决方案