[Laravel 扩展包]Laravel Snowflake:在 Laravel 中实现雪花算法
Laravel Snowflake,用来生成类似于 Twitter 雪花算法的 64 位识别码。
Laravel安装
composer require "kra8/laravel-snowflake"
php artisan vendor:publish --provider="Kra8\Snowflake\Providers\LaravelServiceProvider"
Lumen 安装
- 通过 Composer 安装
composer require "kra8/laravel-snowflake"
- 将如下代码添加到 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');
生成雪花算法标识码
$id = $snowflake->next();
在 Eloquent 中使用
将 Kra8\Snowflake\HasSnowflakePrimary
trait 添加到 Eloquent 模型。该 trait 将 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 支持
avaScript 不能处理 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
Github 仓库:github.com/kra8/laravel-snowflake