dive-be / laravel-snowflake
使用 Twitter Snowflake 生成标识符
1.3.0
2024-03-14 12:59 UTC
Requires
- php: ~8.3
- godruoyi/php-snowflake: ^3.0
- illuminate/cache: ^11.0
- illuminate/contracts: ^11.0
- illuminate/database: ^11.0
- illuminate/support: ^11.0
Requires (Dev)
- larastan/larastan: ^2.0
- laravel/pint: ^1.0
- orchestra/testbench: ^9.0
- phpunit/phpunit: ^11.0
This package is auto-updated.
Last update: 2024-09-22 11:56:35 UTC
README
❄️ 使用 Twitter Snowflake 生成 ID
此包帮助您为 Eloquent 模型创建 Snowflake 标识符。
它是 godruoyi/php-snowflake 的 Laravel 封装。
此包解决了什么问题?
有关 Snowflake 的更多信息,请参阅 原始库。
安装
您可以通过 composer 安装此包
composer require dive-be/laravel-snowflake
您可以使用以下命令发布配置文件
php artisan vendor:publish --provider="Dive\Snowflake\ServiceProvider" --tag="config"
这是发布配置文件的内容
return [ /** * Set this value to today when starting a new app. * You will have 69 years before you run out of snowflakes. */ 'start_date' => '2022-04-10', ];
使用方法
⚠️ 使用高性能缓存驱动程序,如
Redis,以确保快速生成 ID。
❗️ 生产环境中不要使用如
array的短暂缓存驱动程序!
迁移
- 使用
snowflake定义 Snowflake 列 - 使用
foreignSnowflake引用另一个 Snowflake(foreignId的别名)
Schema::table('products', static function (Blueprint $table) { $table->snowflake(); $table->foreignSnowflake('variant_id')->constrained(); });
模型
在您的 Eloquent 模型中使用 HasSnowflake 特性
class Product extends Model { use HasSnowflake; }
手动生成
如果您想手动生成 Snowflake 标识符,有几个选项可供选择
Snowflake::id(); // Facade snowflake(); // Helper app('snowflake'); // Service Locator // Dependency Injection public function __construct(\Godruoyi\Snowflake\Snowflake $snowflake) {}
📣 关于 JavaScript 兼容性的说明
虽然 JavaScript 本身实际上 支持 BigInt,但 JSON 标准不支持。
JSON.parse("{\"a\":10n}") // Uncaught SyntaxError: Unexpected token n in JSON at position 7
因此,为了确保在客户端使用 JSON.parse 等类似方法反序列化时标识符不会被截断,该包将自动将模型的 id 字段转换为 string。
测试
composer test
变更日志
有关最近更改的更多信息,请参阅 CHANGELOG。
贡献
有关详细信息,请参阅 CONTRIBUTING。
安全
如果您发现任何与安全相关的问题,请通过电子邮件 oss@dive.be 反馈,而不是使用问题跟踪器。
鸣谢
许可
MIT 许可证(MIT)。有关更多信息,请参阅 许可文件。
