kra8 / laravel-snowflake

适用于 Laravel 和 Lumen 的 Snowflake。

v2.3.0 2024-03-15 01:00 UTC

This package is auto-updated.

Last update: 2024-09-15 01:57:48 UTC


README

Build Status Latest Stable Version License

此 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

许可协议

MIT 许可协议