foodticket / laravel-efficient-uuid
一个用于扩展Laravel迁移的包,用于在数据库中更高效地存储UUID字段
Requires
- php: ^8.1 || ^8.2
- dyrynda/laravel-model-uuid: ^7.0 || 8.0.0-beta.1
- illuminate/container: ^10.0 || ^11.0
- illuminate/contracts: ^10.0 || ^11.0
- illuminate/database: ^10.0 || ^11.0
- ramsey/uuid: ^4.7
Requires (Dev)
- laravel/legacy-factories: ^1.3 || ^1.4
- mockery/mockery: ^1.4.4 || ^1.5 || ^1.6
- orchestra/testbench: ^8.0 || ^9.0
- phpunit/phpunit: ^9.6.0 || ^10.0.7 || ^11.0.1
This package is auto-updated.
Last update: 2024-09-15 13:07:19 UTC
README
简介
此包扩展了给定MySQL连接的默认语法文件,添加了一个efficientUuid
蓝图方法,用于创建binary(16)
字段。
从3.0版本开始,此包不再覆盖Laravel的默认uuid
方法,而是添加了一个单独的efficientUuid
字段,这是由于与Laravel Telescope的兼容性问题(#11)。
从4.0版本开始,此包使用自定义转换来为模型提供转换功能。
注意:此包有意不使用包发现,因为它会对MySQL模式文件进行更改,这是一件您应该明确启用的。
MySQL、SQLite和PostgreSQL是唯一支持的数据连接类型,尽管我欢迎任何将此功能应用于其他数据库驱动程序的拉取请求。
注意,doctrine/dbal
似乎不支持更改现有的uuid
字段,这样做会导致现有值在任何情况下都被截断。
有关存储和优化UUID的信息,请参阅此文章。
在结合laravel-model-uuid使用UUID时,Laravel的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列作为验证策略的一部分,您可以使用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问题跟踪器报告问题,或者更好的是,分叉存储库并提交一个拉取请求。
如果您使用此包,我很乐意听听您的想法。谢谢!
免费软件
您可以使用此包,但如果它进入您的生产环境,您需要为世界买一棵树。
现在众所周知,应对气候危机并防止气温上升超过1.5摄氏度的最佳工具之一是植树。如果您支持此方案并为Treeware森林做出贡献,您将为当地家庭创造就业机会并恢复野生动物栖息地。
您可以在这里购买树木
有关Treeware的更多信息,请访问treeware.earth