adnane/simple-uuid

一个简单的Laravel扩展包,用于生成UUID而不是作为主键的自增ID

v1.0.0 2021-12-21 00:02 UTC

This package is auto-updated.

Last update: 2024-09-21 18:02:08 UTC


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,

使用

由于此包旨在简单使用,因此您可以简单地

  1. 在您想要使用UUID的模型中导入包的特质
use Adnane\SimpleUuid\Traits\SimpleUuid;

# or if using an alias 

use SimpleUuid;
  1. 将其添加到模型类中
use Adnane\SimpleUuid\Traits\SimpleUuid;

class User extends Model
{
    use HasFactory ,SimpleUuid;
  1. 更新您的目标迁移文件
Schema::create('users', function (Blueprint $table) {
    $table->uuid('id')->primary();
    ..         
  1. 运行Laravel迁移
php artisan migrate 
  1. 存储一个虚拟记录并检查存储的ID
e0fbbbb1-446c-4a75-be2e-746f555722b2
  1. 作为外键使用
# comments_table
$table->uuid('user_id')->index();
$table->foreign('user_id')->references('id')->on('users');

贡献

欢迎所有人:)

致谢

Adnane.Ka