dive-be / eloquent-utils
用于提升开发体验的声明式 Eloquent 工具
0.3.0
2024-03-14 12:42 UTC
Requires
- php: ~8.3
- illuminate/database: ^11.0
Requires (Dev)
- laravel/pint: ^1.0
README
此包是常见 Eloquent 任务声明式工具的集合。
安装
您可以通过 composer 安装此包。
composer require dive-be/eloquent-utils
使用
再次强调,主要目的是提供一个 声明式 接口,用于频繁的 命令式 任务。额外的好处是,由于声明式的性质,浏览模型的人可以立即看到正在发生的事情。
DisablesTimestamps
禁用 created_at 和 updated_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)。请参阅 许可证文件 了解更多信息。