kebook.programacao.1 / laravel-ulid
Laravel 包用于 ULID(通用唯一字母顺序可排序标识符)
v2.1
2021-05-26 18:02 UTC
Requires
- php: ^7.0|^8.0
- laravel/framework: ^5.3|^6.0|^7.0|^8.0
This package is not auto-updated.
Last update: 2024-09-27 09:03:53 UTC
README
Laravel 包用于生成 ULID(通用唯一字母顺序可排序标识符),还包含一个 trait,可以让你的 Eloquent 模型自动生成 ULID 标识符。基于 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('table_id_name', 26)->primary(); .... .... $table->timestamps(); });
如果相关模型使用 ULID,则列类型也应反映这一点。
Schema::create('items', function (Blueprint $table) { $table->char('table_id_name', 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; protected $ulid = "same_name_on_migration_here"; }
控制器
当您创建一个使用 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