adnane / simple-uuid
一个简单的Laravel扩展包,用于生成UUID而不是作为主键的自增ID
README
一个简单的Laravel扩展包,用于生成UUID而不是作为主键的自增ID。
那么UUID究竟是什么?
UUID代表通用唯一标识符。你可能还会遇到它的缩写GUID(全球唯一标识符)。
它是一个16字节的全球唯一数字!而且绝对是,不需要使用任何类型的中心权威或任何外部API。实际上,它的生成方式遵循标准算法,确保每个UUID都是唯一的。而且在整个世界上,生成与另一个地方完全相同的UUID几乎是不可能的。
一般来说,它看起来像这样
e0fbbbb1-446c-4a75-be2e-746f555722b2
但是,为什么你需要使用它而不是仅仅使用自增ID呢?
好吧,不能简单地说你总是需要使用UUID而不是自增ID来在数据库中索引你的对象。但了解它们的不同用途并根据你的需求进行选择是件好事。
以下是你应该使用UUID的一些原因
-
安全性:这肯定是因为UUID无法猜测,而自增ID则不同。
-
关于数据库扩展:想象一下,你一直在两个自托管的博客平台上撰写博客文章。出于某种原因,你想将这两个博客合并成一个。如果你使用了通常的自增ID,你就必须重新索引数据库中的每个博客文章,并更新可能指向它们的每个外键。但如果你使用了UUID作为主键,则无需做任何工作!
-
本地优先的应用程序!:假设我有一个协作应用程序。我想能够在离线时也能使用该应用程序。这意味着创建应添加到公共数据库中的新内容。我期望的是应用程序让我创建我的新内容,并在我上线时将其合并到中央共享数据库中。我还期望我的同事也能这样做。在这种情况下,数据库中的条目不能使用自增数字进行索引。因为我和我的同事在离线时都会创建具有相同ID的条目。一旦上线,我们就会面临许多数据合并问题。在这种情况下,UUID是一个绝佳的解决方案!
安装
警告:此包无法通过Composer 1.x安装,在尝试安装之前,请确保已升级到Composer 2+。
使用composer
composer require adnane/simple-uuid
包的服务提供者是自动加载的,因此无需在app.php
中的提供者数组中添加它。实际上,你可能需要在app.php
中的别名数组中为包的特质定义别名,如下所示
'aliases' => [ .. 'SimpleUuid' => Adnane\SimpleUuid\Traits\SimpleUuid::class,
使用
由于此包旨在简单使用,因此您可以简单地
- 在您想要使用UUID的模型中导入包的特质
use Adnane\SimpleUuid\Traits\SimpleUuid; # or if using an alias use SimpleUuid;
- 将其添加到模型类中
use Adnane\SimpleUuid\Traits\SimpleUuid; class User extends Model { use HasFactory ,SimpleUuid;
- 更新您的目标迁移文件
Schema::create('users', function (Blueprint $table) { $table->uuid('id')->primary(); ..
- 运行Laravel迁移
php artisan migrate
- 存储一个虚拟记录并检查存储的ID
e0fbbbb1-446c-4a75-be2e-746f555722b2
- 作为外键使用
# comments_table $table->uuid('user_id')->index(); $table->foreign('user_id')->references('id')->on('users');
贡献
欢迎所有人:)