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