Laravel 5.0 系列 - Eloquent属性类型转换(Attribute Casting)
我已经完全忘记为我的laravel 5.0系列博客结尾了,但我在Laravel 5 Eloquent Attribute Casting is Awesome上看到了关于属性类型转换的简介,所以我认为我还是需要把它添加进特性列表中。可以在Eloquent官方文档中查看
##什么是属性类型转换?#
转换一个属性意味着将它改变为(或作确认)一个特定的类型,例如我们熟悉的整形integer或者布尔型boolean。
Eloquent模型中的新特性——属性类型转换,能让你设定你的模型,实现将Elouquent模型中特定属性自动转换为正确的类型。
说明:过去的版本也能实现这一功能,但是你必须为每个属性设置一个转换方法;现在你只需要配置一个数组就能自动实现
也就是说如果你在数据库将数据存成某种特定格式,而你希望以另外一种不同的格式取出,你就能使用”属性类型转换“去转换为新的格式
##为什么用它?#
使用属性类型转换最普遍的情况是:你存储的数字——他们默认取回的是字符串string,但Eloquent属性转换允许你将他们转换为整形integer,通用类型real,单精度浮点型float,双精度浮点型double
当然这还不是属性类型转换的全部作用。
##怎么使用它#
如果你想使用属性类型转换,需要在Eloquent模型中添加一个protected型的数组$cast
/**
* The attributes that should be casted to native types.需要转换类型的属性
*
* @var array
*
/
protected $casts = ['is_admin' => 'boolean',];
正如上面的例子,每个数组中的实体以属性名为索引(key),目标转换类型为值(value)。这个$casts数组用来告诉Eloquent模型:“每次我获取名为is_admin的属性,请帮我转变为布尔类型(boolean)”
##转换的种类#
###整形 (integer 或 int)
目标转换类型为integer时执行return (int) $value。
###浮点型(float 或 real 或 double)
Real,Float,和 Double在PHP里是相同的。PHP的double和real类型都只是float的别名(aliases);如果你查看源文件,会发现Eloquent编写上,这三种类型都是执行return (float) $value。
###字符串(string)
目标转换类型为string时执行return (string) $value。
###布尔型 (boolean 或 bool)
目标转换类型为boolean时执行return (bool) $value。也就是你很可能用0和1来存储你的值
###对象(object)
对象和数组是最有趣的选项。它们都是转换(反序列deserialize)JSON序列(JSON-serialized)数组为PHP的内容。对象执行return json_decode($value)转换,返回一个stdClass对象
###数组(array)
数组使用反序列的方法将JSON序列(JSON-serialized)数组转变为PHP的数组,即执行return json_decode($value, true),返回的是一个数组。
你可以在源代码中看到这些实现
##写在最后#
正如上面所说,Eloquent的属性类型转换有大量的潜在好处,让我们从不必要的、重复的逻辑中解放出来,同时更容易存储JSON格式数据进我们的数据库。真是好东西!
原文地址:https://mattstauffer.co/blog/laravel-5.0-eloquent-attribute-casting
