属性类型转换

2018-02-24 15:52 更新

如果您想要某些属性始终转换成另一个数据类型, 您可以在模型中增加 casts 属性。否则,您需要为每个属性定义修改器,这样会增加更多的时间开销。这里有一个使用 casts 属性的例子:

/**
 * 需要被转换成基本类型的属性值。
 *
 * @var array
 */
protected $casts = [
    'is_admin' => 'boolean',
];

现在当你获取 is_admin 属性时始终会是布尔类型,甚至在数据库中存储的这个值是一个整型也会被转换。其他支持的类型转换值有: integer, real, float, double, string, boolean, object 和 array 。

如果您存储的值是一个序列化的 JSON 时,那么 array 类型转换将会非常有用。比如,您的数据表里有一个 TEXT 类型的字段存储着序列化后的 JSON 数据, 通过增加 array 类型转换, 当获取这个属性的时候会自动反序列化成 PHP 的数组:

/**
 * 需要被转换成基本类型的属性值。
 *
 * @var array
 */
protected $casts = [
    'options' => 'array',
];

现在,当你使用 Eloquent 模型时:

$user = User::find(1);
// $options 是一个数组...
$options = $user->options;
// options 会自动序列化成 JSON...
$user->options = ['foo' => 'bar'];
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号