kra8 / laravel-snowflake
适用于 Laravel 和 Lumen 的 Snowflake。
v2.3.0
2024-03-15 01:00 UTC
Requires
- php: ^8.2
- illuminate/support: ^6.3|^7.0|^8.0|^9.0|^10.0|^11.0
Requires (Dev)
- orchestra/testbench: ^8.0
- phpunit/phpunit: ^10.0|^11.0
README
此 Laravel 扩展包用于生成类似于 Twitter 中的 Snowflake 的 64 位标识符。
Laravel 安装
composer require "kra8/laravel-snowflake"
php artisan vendor:publish --provider="Kra8\Snowflake\Providers\LaravelServiceProvider"
Lumen 安装
- 通过 composer 安装
composer require "kra8/laravel-snowflake"
- Bootstrap 文件更改:在 providers 部分添加以下片段到 bootstrap/app.php 文件中,如下所示
// Add this line $app->register(Kra8\Snowflake\Providers\LumenServiceProvider::class);
用法
获取实例
$snowflake = $this->app->make('Kra8\Snowflake\Snowflake');
或
$snowflake = app('Kra8\Snowflake\Snowflake');
生成 Snowflake 标识符
$id = $snowflake->next();
Eloquent 用法
将 Kra8\Snowflake\HasSnowflakePrimary
特性添加到您的 Eloquent 模型中。此特性将主键的类型设为 snowflake
。特性将自动将 $incrementing 属性设置为 false。
<?php namespace App; use Kra8\Snowflake\HasSnowflakePrimary; use Illuminate\Notifications\Notifiable; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable { use HasSnowflakePrimary, Notifiable; }
支持 id
列类型。
/** * Run the migrations. * * @return void */ public function up() { Schema::create('users', function (Blueprint $table) { $table->id(); $table->string('name'); $table->string('email')->unique(); $table->string('password'); $table->rememberToken(); $table->timestamps(); }); }
JavaScript 支持
由于 JavaScript 无法处理 64 位整数,因此还有一个 HasShortPrimary
,它为 53 位整数创建 ID,该整数可以被 JavaScript 处理。
要使用它,只需将 HasSnowflakePrimary
更改为 HasShortPrimary
。
<?php namespace App; use Kra8\Snowflake\HasShortflakePrimary; use Illuminate\Notifications\Notifiable; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable { use HasShortflakePrimary, Notifiable; }
配置
如果 config/snowflake.php
文件不存在,运行以下命令
php artisan vendor:publish