大昏王/eloquent-mutant-caster

扩展Eloquent的属性转换功能,支持将单个转换器/访问器对应用于多个字段

v0.1.0.1 2016-11-07 19:45 UTC

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上。

如果您发现安全问题,请直接给我发邮件