dive-be/eloquent-utils

用于提升开发体验的声明式 Eloquent 工具

0.3.0 2024-03-14 12:42 UTC

This package is auto-updated.

Last update: 2024-09-14 13:37:09 UTC


README

Latest Version on Packagist

此包是常见 Eloquent 任务声明式工具的集合。

安装

您可以通过 composer 安装此包。

composer require dive-be/eloquent-utils

使用

再次强调,主要目的是提供一个 声明式 接口,用于频繁的 命令式 任务。额外的好处是,由于声明式的性质,浏览模型的人可以立即看到正在发生的事情。

DisablesTimestamps

禁用 created_atupdated_at 的自动更新。

class Country extends Model
{
    use \Dive\Eloquent\DisablesTimestamps;
}

InteractsWithStaticData

依赖于:DisablesTimestamps, Unwritable

通过在每个静态模型旁边缓存每条记录来防止不必要的数据库往返。

迁移

定义一个唯一列。

Schema::create('languages', static function (Blueprint $table) {
    $table->id();
    $table->char('iso', 2)->unique();
});

模型

源数据在 同一文件 中定义。

final class Language extends Model
{
    use \Dive\Eloquent\InteractsWithStaticData;
}

Language::$source = [
    'DE' => ['id' => 1, 'iso' => 'DE'],
    'EN' => ['id' => 2, 'iso' => 'EN'],
    'FR' => ['id' => 3, 'iso' => 'FR'],
    'NL' => ['id' => 4, 'iso' => 'NL'],
];

(数据库) Seeder

public function run(ConnectionInterface $db)
{
    $db->table('languages')->insert(Language::$source);
}

使用

不会执行任何数据库查询...

Language::find('NL'); // App\Models\Language { #3645 }

Unguarded

每个模型的基础上 禁用 批量赋值保护

class Product extends Model
{
    use \Dive\Eloquent\Unguarded;
}
Product::find(1337)->fill([
    'sku' => 'abcdefg',
])->save(); // true

Unwritable

使您的 Eloquent 模型为只读。

class Coupon extends Model
{
    use \Dive\Eloquent\Unwritable;
}
Coupon::find(10)->update(['code' => 'je-suis-rogue']); // BadMethodCallException

更新日志

请参阅 更新日志 了解最近的变化。

贡献

请参阅 贡献指南 了解详情。

安全

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

致谢

许可证

MIT 许可证 (MIT)。请参阅 许可证文件 了解更多信息。