属性类型转换
最后更新于:2022-04-01 15:12:18
如果您想要某些属性始终转换成另一个数据类型, 您可以在模型中增加 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'];
~~~