ufucms / laravel-snowflake
分布式唯一ID,基于雪花算法。
1.0.3
2023-08-10 03:51 UTC
Requires
- php: ^8.0|^8.1
- illuminate/support: ^6.3|^7.0|^8.0|^9.0|^10.0
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