maxsky/laravel-snowflake

Laravel/Lumen 的 Snowflake

v1.2.1 2019-07-02 17:56 UTC

This package is auto-updated.

Last update: 2024-08-29 05:06:45 UTC


README

Build Status Latest Stable Version License

此 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;
}

最后,在迁移中,将主键设置为 bigIntegerprimary

/**
 * 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();
    });
}

许可协议

MIT 许可协议Kra8 提供。