limanweb/uuid

自定义 UUID 生成和分析函数

安装: 3,597

依赖项: 0

建议者: 0

安全: 0

星星: 1

观察者: 1

分支: 0

开放问题: 0

类型:

v1.1.1 2024-05-28 17:50 UTC

This package is auto-updated.

Last update: 2024-09-28 18:37:01 UTC


README

描述

包提供了生成和分析 UUID 的任何函数。

生成 UUID 的结构

使用自定义算法生成具有以下结构的 UUID

SSSSSSSS-UUUU-UAAA-EEEE-RRRRRRRRRRRR
  • S - 8 个十六进制数字是 UUID 生成时间戳的秒值
  • U - 5 个十六进制数字是 UUID 生成时间戳的微秒值
  • A - 3 个十六进制数字是自定义应用代码
  • E - 4 个十六进制数字是自定义实体代码
  • R - 12 个十六进制数字是随机值

什么是实体和应用程序代码?

在调用 genUuid() 时,您可以定义任何整数的实体代码和/或应用程序代码。这允许您区分不同应用程序为不同数据库实体创建的 UUID。

安装

运行命令将包安装到您的项目中

composer require limanweb/uuid

Limanweb\Uuid\Support\Uuid 函数

genUuid()

语法

genUuid(int $entityCode = null, int $appCode = null) : string

返回 UUID 字符串。

参数

  • $entityCode - 实体的自定义整数代码(默认为 0)。最大值是 65535
  • $appCode - 应用程序的自定义整数代码(默认为 0)。最大值是 4095

返回 UUID 字符串。

示例

$uuid = \Limanweb\Uuid\Support\Uuid::genUuid(256, 16);
echo $uuid; // "5ec004c4-0db2-0010-0100-a08cc1dd9a2b"

getUuidTimestamp()

语法

getUuidTimestamp(string $uuid, string $format = 'Carbon') : mixed

从由 genUuid() 生成的 UUID 中检索时间戳。

参数

  • $uuid - 分析的 UUID;
  • $format - 返回时间戳值的格式。您可以使用以下三种变体之一
    • Carbon(默认)以 \Carbon\Carbon 对象获取时间戳;
    • DateTime 以 \DateTime 对象获取时间戳;
    • 用于 format() 的日期格式字符串,以获取格式化的时间戳字符串。例如:'Y-m-d H:i:s.u'

示例

$uuid = "5ec004c4-0db2-0010-0100-a08cc1dd9a2b";

$ts = \Limanweb\Uuid\Support\Uuid::getUuidTimestamp($uuid, "Y-m-d H:i:s.u");

echo $ts; // "2020-05-16 18:20:36.056096"	

getUuidAppCode()

语法

getUuidAppCode(string $uuid) : int

从由 genUuid() 生成的 UUID 中检索应用程序代码。

参数

  • $uuid - 分析的 UUID;

示例

$uuid = "5ec004c4-0db2-0010-0100-a08cc1dd9a2b";

$appCode = \Limanweb\Uuid\Support\Uuid::getUuidAppCode($uuid);
echo $appCode; // 16

getUuidAppCode()

语法

getUuidAppCode(string $uuid) : int

从由 genUuid() 生成的 UUID 中检索应用程序代码。

参数

  • $uuid - 分析的 UUID;

示例

$uuid = "5ec004c4-0db2-0010-0100-a08cc1dd9a2b";

$appCode = \Limanweb\Uuid\Support\Uuid::getUuidAppCode($uuid);
echo $appCode; // 256

使用 trait UsesUuid

  1. 将 trait \Limanweb\Uuid\Models\Concerns\UsesUuids 使用声明添加到模型中,其中主键是 UUID。

  2. 您可以在模型中定义 $appCode$entityCode 受保护的属性,以生成具有特定段的模型 UUID 键。

此 trait

  • 重写 getIncrementing()getKeyType() 方法,因此您不需要定义属性 $incrementing$keyType
  • 添加 getAppCode()getEntityCode() 公共方法;
  • 注册 创建 事件处理器以生成 UUID 并填充模型键。

示例

class MyModel extends Model
{
	use \Limanweb\Uuid\Models\Concerns\UsesUuids;
	
	protected $appCode = 16;	// 010
	protected $entityCode = 256;	// 0100
	
	...

为此模型生成的所有 ID 都将匹配模式 ########-####-#010-0100-############