ufucms/laravel-snowflake

分布式唯一ID,基于雪花算法。

1.0.3 2023-08-10 03:51 UTC

This package is auto-updated.

Last update: 2024-09-20 14:50:40 UTC


README

这个 Laravel 包生成 64 位标识符,就像 Twitter 中的雪花一样。

Laravel 安装

composer require "ufucms/laravel-snowflake"

php artisan vendor:publish --provider="Ufucms\Snowflake\Providers\LaravelServiceProvider"

Lumen 安装

  • 通过 composer 安装
composer require "ufucms/laravel-snowflake"
  • Bootstrap 文件更改:将以下代码段添加到 bootstrap/app.php 文件中的 providers 部分,如下所示:
// Add this line
$app->register(Ufucms\Snowflake\Providers\LumenServiceProvider::class);

使用方法

获取实例

use Ufucms\Snowflake\Snowflake;

$snowflake = new Snowflake();

$snowflake = $this->app->make('Ufucms\Snowflake\Snowflake');

$snowflake = app('Ufucms\Snowflake\Snowflake');

生成雪花标识符

$id = $snowflake->nextId();

$id = $snowflake->id();

$id = Snowflake::nextId();

Eloquent 使用方法

Ufucms\Snowflake\HasSnowflakePrimary 特征添加到您的 Eloquent 模型中。此特征将主键类型设置为 snowflake。Trait 会自动将 $incrementing 属性设置为 false。

<?php
namespace App;

use Ufucms\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,它为 JavaScript 可以处理的 53 位整数创建 ID。

<?php
namespace App;

use Ufucms\Snowflake\HasShortPrimary;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use HasShortPrimary, Notifiable;
}

配置

如果 config/snowflake.php 不存在,运行以下命令:

php artisan vendor:publish

许可证

MIT 许可证