大昏王 / eloquent-mutant-caster
扩展Eloquent的属性转换功能,支持将单个转换器/访问器对应用于多个字段
v0.1.0.1
2016-11-07 19:45 UTC
Requires
- illuminate/database: ^5.0
This package is auto-updated.
Last update: 2024-09-10 22:48:26 UTC
README
扩展Eloquent的属性转换功能,支持将单个转换器/访问器对应用于多个字段
安装
使用composer
composer require danhunsaker/eloquent-mutant-caster
就是这样。
使用方法
在您想扩展的任何模型上包含Danhunsaker\Eloquent\Traits\MutantCaster
特性
use Danhunsaker\Eloquent\Traits\MutantCaster; use Illuminate\Database\Eloquent\Model; class BaseModel extends Model { use MutantCaster; }
现在您可以通过为您的类型创建访问器来简单地定义新的转换类型
public function getMyNewAwesomeTypeAttribute($value) { return new MyNewAwesomeType($value); }
就像使用任何内置的转换选项一样使用它们
protected $casts = [ 'field' => 'my-new-awesome-type', ];
并且为了在保存时自动将值转换回来(假设您的新的类型没有通过类似__toString()
这样的方式正确处理),只需为您的类型添加一个转换器即可
public function setMyNewAwesomeTypeAttribute($key, $value) { $this->attributes[$key] = $value->prepForDatabaseStorage(); return $this; }
请注意,您不需要同时拥有访问器和转换器 - 您只需为您的新的类型创建所需的任何一个,一切都会继续顺利。
转换特性
使用此库的推荐方法是编写每个新类型的特性,然后在将使用它的模型上包含这些特性。包含的一个特性既作为示例,也供那些希望使用它的人。
CastIP
CastIP
是一个用于处理IP地址的特性。它需要GMP扩展,允许它支持IPv4和IPv6,并将地址存储在数据库中的整数中。因为IPv6地址使用128位,您可能无法使用数据库的整数类型来存储这些地址 - 我推荐使用DECIMAL(40, 0)
列,但您可以使用任何可以正确存储值的字段类型(包括字符串类型)。
要使用此特性,只需在模型中包含它,并将您的$casts
属性设置为使用ip
。
use Danhunsaker\Eloquent\Traits\CastIP; use Danhunsaker\Eloquent\Traits\MutantCaster; use Illuminate\Database\Eloquent\Model; class BaseModel extends Model { use MutantCaster, CastIP; protected $casts = [ 'field' => 'ip', ]; }
贡献
贡献(问题、拉取请求等)始终欢迎在GitHub上。
如果您发现安全问题,请直接给我发邮件。