October cms(数据库-序列化)

Model Serialization 模块序列化


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 设置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值