maxsky / laravel-snowflake
Laravel/Lumen 的 Snowflake
v1.2.1
2019-07-02 17:56 UTC
Requires
- php: >=7.0.0
Requires (Dev)
- orchestra/testbench: ^3.5
This package is auto-updated.
Last update: 2024-08-29 05:06:45 UTC
README
此 Laravel/Lumen 包用于生成类似于 Twitter 中的 snowflake 的 64 位标识符。
安装
composer require "maxsky/laravel-snowflake" # Just used with Laravel php artisan vendor:publish --provider="Snowflake\SnowflakeServiceProvider"
配置
如果 config/snowflake.php
文件不存在,运行以下命令
# Just Laravel
php artisan vendor:publish
如果使用 Lumen 框架,请将 vendor/maxsky/laravel-snowflake/config/snowflake.php
文件复制到 config
文件夹。
然后,在 .env
文件中添加一些环境配置(如果使用的话)
SNOWFLAKE_EPOCH='2019-05-01 00:00:00' SNOWFLAKE_WORKER_ID=1 SNOWFLAKE_DATACENTER_ID=1
使用方法
获取实例
$snowflake = app('Snowflake\Snowflake');
生成 snowflake 标识符
$id = $snowflake->next();
与 Eloquent 一起使用
将 Snowflake\HasSnowflakePrimary
特性添加到您的 Eloquent 模型中。这个特性将主键的类型设置为 snowflake
。别忘了将自动递增属性设置为 false。
<?php namespace App; use Snowflake\HasSnowflakePrimary; use Illuminate\Notifications\Notifiable; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable { use HasSnowflakePrimary, Notifiable; /** * Indicates if the IDs are auto-incrementing. * * @var bool */ public $incrementing = false; }
最后,在迁移中,将主键设置为 bigInteger
和 primary
。
/** * Run the migrations. * * @return void */ public function up() { Schema::create('users', function (Blueprint $table) { // $table->increments('id'); $table->bigInteger('id')->primary(); $table->string('name'); $table->string('email')->unique(); $table->string('password'); $table->rememberToken(); $table->timestamps(); }); }