编程

[Laravel 扩展包]Laravel Snowflake:在 Laravel 中实现雪花算法

389 2024-09-05 23:49:00

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