mr-feek/eloquent-null-casts

当模型属性为null且在casts数组中列出时,将进行类型转换。与默认的Eloquent不同。

v0.1 2020-04-22 21:16 UTC

This package is auto-updated.

Last update: 2024-09-11 03:02:57 UTC


README

Packagist Packagist dev-master Tests

默认情况下,Laravel不允许将casts数组中列出的属性null值进行类型转换。这并不总是期望的,因为有时你希望确保属性始终为布尔值。此包提供了一个简单的特质,可以在每个模型的基础上覆盖此行为。不一定总是可行地运行迁移以不再允许数据库中的null值。

安装

您可以通过composer安装此包

composer require mr-feek/eloquent-null-casts

使用方法

在PHP中,我们无法在应用了特质的类中覆盖特质的属性,因此我们有两种实现选择。

第一个选项是使用CastsNullAttributes特质,并在构造函数中定义casts。

<?php declare(strict_types=1);

namespace MrFeek\EloquentNullCasts\Tests\data;

use Illuminate\Database\Eloquent\Model;
use MrFeek\EloquentNullCasts\CastsNullAttributes;

final class User extends Model
{
    use CastsNullAttributes;
    
    public function __construct(array $attributes = [])
    {
        parent::__construct($attributes);

        $this->casts = [
            'deleted' => 'boolean',
        ];
    }
}

另一个选项是使用继承来实现CastsNullAtrributes特质,并继续按Eloquent通常的方式在行内定义casts。

<?php declare(strict_types=1);

namespace MrFeek\EloquentNullCasts\Tests\data;

use Illuminate\Database\Eloquent\Model;
use MrFeek\EloquentNullCasts\CastsNullAttributesModel;

final class User extends CastsNullAttributesModel
{
    protected $casts = [
        'deleted' => 'boolean',
    ];
}

在这两种情况下,如果deleted的实际值为null,它实际上会被转换为布尔值(false),以满足后续的类型提示。

测试

composer test

变更日志

请参阅CHANGELOG获取更多关于最近更改的信息。

贡献

请参阅CONTRIBUTING以获取详细信息。

安全

如果您发现任何与安全相关的问题,请通过电子邮件fpm5022@gmail.com而不是使用问题跟踪器。

致谢

许可证

MIT许可证(MIT)。请参阅许可证文件以获取更多信息。

Laravel Package Boilerplate

此包是使用Laravel Package Boilerplate生成的。