jn-jairo/laravel-eloquent-cast

Laravel Eloquent 类型转换

v3.0.1 2024-03-14 23:54 UTC

This package is auto-updated.

Last update: 2024-09-15 01:03:04 UTC


README

Total Downloads Latest Stable Version License

Laravel Eloquent 类型转换

此包通过 jn-jairo/laravel-cast 包扩展了 Laravel 内置的 属性类型转换

版本兼容性

安装

您可以通过 composer 安装此包

composer require jn-jairo/laravel-eloquent-cast

使用方法

\Illuminate\Database\Eloquent\Model 中使用特质 \JnJairo\Laravel\EloquentCast\HasAttributesCast。在模型的 $casts 属性中,将属性名作为键,类型:格式作为值。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use JnJairo\Laravel\EloquentCast\HasAttributesCast;

class Foo extends Model
{
    use HasAttributesCast;

    protected $casts = [
        'uuid' => 'uuid',
        'is_admin' => 'boolean',
        'created_at' => 'datetime:Y-m-d H:i:s',
    ];
}

在获取器中对 PHP 类型进行转换,并/或添加后缀,在设置器中对 数据库 类型进行转换,在序列化为 数组/json 时对 json 类型进行转换。

示例

$foo = new Foo();
$foo->uuid = '72684d25-b173-468d-8d45-2a10b2cc3e9f';
$foo->is_admin = 1;
$foo->created_at = '2000-01-01 00:00:00';

print_r(gettype($foo->uuid));
// string

print_r(get_class($foo->uuid_));
// Ramsey\Uuid\Uuid

var_dump($foo->is_admin);
// bool(true)

print_r($foo->created_at);
Illuminate\Support\Carbon Object
(
    [date] => 2000-01-01 00:00:00.000000
    [timezone_type] => 3
    [timezone] => UTC
)

配置

将配置发布到 config/eloquent-cast.php

php artisan vendor:publish --provider=JnJairo\\Laravel\\EloquentCast\\EloquentCastServiceProvider

在默认配置中,属性在获取器中对 PHP 类型进行转换并添加 _ 后缀,除了类型 uuid,它仅使用 _ 后缀进行转换,因为直接在获取器中对主键/外键进行转换会破坏 Eloquent 模型之间的关系。

许可证

MIT 许可证(MIT)。有关更多信息,请参阅 许可证文件