Laravel - 为 WEB 艺术家创造的 PHP 框架。

PHP THAT DOESN'T HURT. CODE HAPPY & ENJOY THE FRESH AIR.

Laravel logo

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)”

##转换的种类#

###整形 (integerint)

目标转换类型为integer时执行return (int) $value

###浮点型(floatrealdouble)

RealFloat,和 Double在PHP里是相同的。PHP的doublereal类型都只是float的别名(aliases);如果你查看源文件,会发现Eloquent编写上,这三种类型都是执行return (float) $value

###字符串(string)

目标转换类型为string时执行return (string) $value

###布尔型 (booleanbool)

目标转换类型为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

关于作者 雨师
广州
由于学艺不精,内容可能有误。如有错误欢迎联系邮箱312841925@qq.com指出。谢谢!