cviebrock / eloquent-typecast
用于Eloquent模型强制类型转换检索值的特质
Requires
- php: >=5.4.0
- illuminate/database: 4.*
- illuminate/support: 4.*
Requires (Dev)
- laravelbook/ardent: dev-master
- orchestra/testbench: 2.*
- phpunit/phpunit: 4.0.*
This package is auto-updated.
Last update: 2024-09-05 18:13:59 UTC
README
一个特质,允许Laravel项目的Eloquent模型将属性值转换为原生PHP变量类型。
背景:我为什么需要这个?
对于某些数据库驱动程序,从查询返回的所有属性都作为字符串返回,即使底层列类型是 INTEGER 或 FLOAT 或 BOOLEAN。
而不是使用这些“看起来像整数的”字符串等,并依赖于PHP的类型转换,这个特质将自动将这些属性值转换为正确的原生PHP变量类型。
如果你正在构建API并且只想返回Eloquent模型的JSON版本,这将非常方便。使用这个特质,所有JSON元素都将适合你的API消费者类型,而不是所有都是字符串,从而在他们的端上节省类型转换。
注意:我相信如果你在PHP安装中使用mysqlnd驱动程序,那么你不需要这个特质,因为mysqlnd会为你处理这个类型转换。你可以通过执行
var_dump($model->getKey())
来尝试它。如果它显示值是整数,你不需要这个包。如果它显示是字符串,请继续阅读。
安装 & 需求
在你的项目composer.json文件中
"require": { "cviebrock/eloquent-typecast": "1.*" }
在你的项目模型(或你的基础模型)中
use Cviebrock\EloquentTypecast\EloquentTypecastTrait; class MyModel { use EloquentTypecastTrait; // Define the attributes you want typecast here protected $cast = array( 'id' => 'integer', 'price' => 'float', 'is_awesome' => 'boolean' ); ... }
就是这样。不需要服务提供者或外观。然而,由于它是一个特质,因此你需要运行PHP 5.4或更高版本。
使用方法
每次你请求在 $cast
数组中列出的属性时,它都会从数据库返回的(通常是)字符串转换为指定的原生PHP变量类型。
$cast
数组的键是属性(即列)名称,值是你想要转换到的类型。PHP的 settype() 函数支持的任何内容都有效 ... 尽管将数组、对象或null转换为可能有问题。
如果你将你的模型上的 $castOnSet
属性设置为 true
,那么在设置 $cast
数组中的属性之前,将对该值进行类型转换。例如
class MyModel { use EloquentTypecastTrait; protected $castOnSet = true; protected $cast = array( 'price' => 'float', ); } $myModel = MyModel::find(1); $price = Input::get('price'); // this will be a string $myModel->price = $price; // the string is cast to a float before setting;
一般来说,这个设置并不是真的必要,因为Laravel和大多数数据库会在保存时为你处理字符串到列类型的转换。然而,也许有一些情况下这很有用,所以为了“功能完善”而添加了它。
注意事项
由于特质的工作方式,你应该确保你的 $cast
数组不包括
- 关系
- 你已经有自定义转换器的属性
- 使用Eloquent的 日期转换
$model->toArray()
也会触发转换。然而,$model->getAttributes()
不会。它返回查询的原始值(甚至不是日期转换)。
错误、建议和贡献
请使用Github来报告错误、评论和建议。
- 分叉项目。
- 创建你的修复/功能分支并编写你的(注释良好的)代码。
- 为你的代码创建单元测试
- 在根目录下运行
composer install --dev
以安装所需的测试包。 - 将您的测试方法添加到
eloquent-typecast/tests/TypecastTest.php
文件中。 - 运行
vendor/bin/phpunit
来执行新(和所有之前的)测试,并确保一切通过。
- 在根目录下运行
- 提交您的更改(以及您的测试)并推送到您的分支。
- 针对
develop
分支创建一个新的拉取请求。
请注意,您必须针对develop
分支创建您的拉取请求。
版权和许可证
Eloquent-Typecast由Colin Viebrock编写,并按照MIT许可证发布。有关详细信息,请参阅LICENSE.md文件。
版权所有 2014 Colin Viebrock