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

October cms(数据库-序列化)

热度:9   发布时间:2023-12-06 17:37:43.0

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