rorecek / laravel-ulid
Laravel 包用于生成 ULID(通用唯一字母顺序排序标识符)
v2.0.6
2023-06-25 07:41 UTC
Requires
- php: ^7.0|^8.0|^8.1
- laravel/framework: ^5.3|^6.0|^7.0|^8.0|^9.0|^10.0
README
Laravel 包用于生成 ULID(通用唯一字母顺序排序标识符),还包含为您的模型自动生成 ULID id 的 trait。基于 robinvdvleuten/php-ulid。
什么是 ULID?
在许多情况下,通用唯一标识符(UUID)对于许多用例可能不是最佳选择,因为
- 它不是编码 128 位随机性的最高字符效率的方式
- UUID v1/v2 在许多环境中不切实际,因为它需要访问唯一的、稳定的 MAC 地址
- UUID v3/v5 需要唯一的种子,并生成随机分布的 ID,这可能导致许多数据结构碎片化
- UUID v4 仅提供随机性信息,这可能导致许多数据结构碎片化
因此,ULID 提供了
- 与 UUID 兼容的 128 位
- 每毫秒 1.21e+24 个独特的 ULID
- 字母顺序可排序!
- 规范编码为 26 个字符的字符串,而不是 36 个字符的 UUID
- 使用 Crockford 的 base32 以提高效率和可读性(每个字符 5 位)
- 不区分大小写
- 没有特殊字符(URL 安全)
您可以在 这里 了解更多
优点是什么?
-
在分布式系统中,您可以相当确信主键永远不会冲突。
-
在构建大型应用程序时,自动递增主键不是最佳选择。
-
它使复制变得简单(与 int 相比,这使它变得非常困难)
-
足够安全,不会让用户知道您正在通过 id 获取信息,例如
https://example.com/item/10
安装
您可以使用以下命令通过 composer 安装此包
composer require rorecek/laravel-ulid:^2.0
Laravel 5.5+
无需执行其他操作,因为服务提供者和外观将被自动发现。
Laravel 5.3 和 5.4
您必须安装服务提供者和外观
// config/app.php 'providers' => [ ... Rorecek\Ulid\UlidServiceProvider::class, ]; ... 'aliases' => [ ... 'Ulid' => Rorecek\Ulid\Facades\Ulid::class, ];
使用方法
迁移
当使用迁移时,应将 $table->increments('id') 更改为
$table->char('id', 26)->primary();
简单地,模式看起来像这样。
Schema::create('items', function (Blueprint $table) { $table->char('id', 26)->primary(); .... .... $table->timestamps(); });
如果相关的模型使用 ULID,则列类型也应反映这一点。
Schema::create('items', function (Blueprint $table) { $table->char('id', 26)->primary(); .... // related model that uses ULID $table->char('category_id', 26); $table->foreign('category_id')->references('id')->on('categories'); .... $table->timestamps(); });
模型
要设置模型以使用 ULID,只需使用 HasUlid trait。
use Illuminate\Database\Eloquent\Model; use Rorecek\Ulid\HasUlid; class Item extends Model { use HasUlid; }
控制器
当您创建使用 ULID 的模型的新实例时,此包将自动将 ULID 添加为模型的 id。
// 'HasUlid' trait will automatically generate and assign id field. $item = Item::create(['name' => 'Awesome item']); echo $item->id; // 01brh9q9amqp7mt7xqqb6b5k58
支持
如果您认为您发现了问题,请使用 GitHub 问题跟踪器 报告问题,或者更好的是,分支存储库并提交拉取请求。
如果您使用此包,我很乐意听到您的想法。谢谢!
许可
MIT 许可证 (MIT)。 Pavel Rorecek