dyrynda / laravel-efficient-uuid
Requires
- php: ^8.1
- dyrynda/laravel-model-uuid: ^7.0
- illuminate/container: ^10.0
- illuminate/contracts: ^10.0
- illuminate/database: ^10.0
- ramsey/uuid: ^4.7
Requires (Dev)
- laravel/legacy-factories: ^1.3
- mockery/mockery: ^1.4.4
- orchestra/testbench: ^8.0
- phpunit/phpunit: ^9.6.0 || ^10.0.7
README
简介
此包扩展了给定 MySQL 连接的默认语法文件,添加了一个 efficientUuid
蓝图方法,该方法创建一个 binary(16)
字段。
从 3.0 版本开始,此包不再覆盖 Laravel 的默认 uuid
方法,而是添加了一个单独的 efficientUuid
字段,因为与 Laravel Telescope 存在兼容性问题(#11)。
从 4.0 版本开始,此包使用 自定义转换 来提供到您模型中的转换功能。
注意:此包故意不使用 包发现,因为它会更改 MySQL 架构文件,这是您应该明确启用的。
MySQL、SQLite 和 PostgreSQL 是唯一支持的数据连接类型,尽管我也欢迎任何实现此功能用于其他数据库驱动程序的 pull 请求。
请注意,doctrine/dbal
似乎不支持更改现有的 uuid
字段,这样做会导致您现有的值在任何情况下都被截断。
有关以优化方式存储和操作 UUID 的更多信息,请参阅 此文章。
在 Laravel 中使用 UUID 非常简单,结合 laravel-model-uuid。请注意,当使用 laravel-model-uuid
时,如果您不是转换 UUID 或直接调用查询构建器,则在设置数据库上的 UUID 时需要使用 getBytes
方法,否则您的值将被截断。根据您的 MySQL/MariaDB 配置,这可能导致由于严格的设置而导致应用程序错误。有关更多信息,请参阅 (#1)。
此包通过 Composer 安装。要安装,请运行以下命令。
composer require dyrynda/laravel-efficient-uuid
在您的 config/app.php
配置文件中注册服务提供者
'providers' => [ ... Dyrynda\Database\LaravelEfficientUuidServiceProvider::class, ],
迁移
此功能不需要特殊设置,只需在迁移文件中声明一个 uuid
列类型即可。如果您计划对 UUID 列进行查询,建议您对列进行索引,但请避免将其作为主键。
Schema::create('posts', function (Blueprint $table) { $table->increments('id'); $table->efficientUuid('uuid')->unique(); $table->string('title'); $table->text('body'); $table->timestamps(); });
转换
当使用 laravel-model-uuid 时,您需要在模型中添加一个转换,以正确设置和检索 MySQL 数据库中的二进制字段 UUID。
<?php namespace App; use Dyrynda\Database\Casts\EfficientUuid; use Dyrynda\Database\Support\GeneratesUuid; use Illuminate\Database\Eloquent\Model; class Post extends Model { use GeneratesUuid; protected $casts = [ 'uuid' => EfficientUuid::class, ]; }
通过 UUID 查询
如果您想通过字符串 UUID 查找记录,您需要使用作用域
Post::whereUuid('25b112a9-499a-4627-9ea0-72cd8694aee3')->first();
验证
如果您想将高效的 UUID 列用作验证策略的一部分,您可以使用 EfficientUuidExists
规则。
use Dyrynda\Database\Rules\EfficientUuidExists; public function update(Request $request, User $user) { $request->validate([ // Using the default column name 'uuid' => [new EfficientUuidExists(Post::class)], // Using a custom column name 'custom_uuid' => [new EfficientUuidExists(Post::class, 'custom_uuid')], ]); }
支持
如果您对这个包有任何一般性问题,请随时在Twitter上联系我。
如果您认为您发现了问题,请使用GitHub问题追踪器报告,或者更好的是,分叉仓库并提交一个pull request。
如果您在使用这个包,我很乐意听听您的想法。谢谢!
Treeware
您可以使用这个包,但如果它进入您的生产环境,您需要为世界买一棵树。
众所周知,应对气候危机并防止气温上升超过1.5摄氏度最好的工具之一就是种树。如果您支持这个包并贡献于Treeware森林,您将为当地家庭创造就业机会并恢复野生动物栖息地。
您可以在这里购买树木
在treeware.earth了解更多关于Treeware的信息