poing/earmark

Laravel 包,用于生成唯一且可定制的值序列。


README

StyleCI Coverage Status

Earmark

一个 Laravel 包,用于在序列中标记连续值并消除序列中值被 unset 时产生的任何空缺。 允许值被重复使用。

它可以用来获取应用程序中将要使用的下一个值(或值数组)。使用数据库锁定来 防止 返回重复的值。

一个例子...

为用户预留下一个可用的电话分机。电话分机可以通过活动会话进行预留,防止其他会话获取相同的值。

当用户离开时,电话分机可以被 回收,值可以被 unset()。使该值对未来的请求再次可用。

入门

1. 安装 EarMark

在命令行运行以下命令

composer require poing/earmark

这将更新 composer.json 并将包安装到 vendor/ 目录中。

2. 发布 EarMark 配置文件

要覆盖默认设置,通过运行以下命令初始化配置文件

php artisan earmark:config

然后打开 config/earmark.php 并编辑设置以满足应用程序的要求。

3. 运行迁移

在命令行运行包迁移文件

php artisan migrate

4. 推荐

此包设计用于使用 Laravel 队列,以延迟填充可用值池的耗时任务。

您可能需要更改默认的 QUEUE_CONNECTION 以使用其他策略。但是,该包 与默认的 sync 一起工作,但 可能 会导致应用程序的延迟。

设置

保持大小

这是在可用池中保留的序列值的数量。一旦池降至一定水平以下,更多值将被添加到池中。 这是未使用值被回收的地方。

重要

  • 补充保持大小 是耗时的,并且 可能 需要几分钟才能完成。
  • 根据您如何使用 Earmark,保持大小应该是预期的 get() 请求 最大值 的倍数。
  • 保持大小 应该 配置为允许在低于三分之一的数量后进行足够数量的 get() 请求。

数字范围

此包 目前 支持最小值。 range.min 将定义序列的起始值。 默认值:2000

2000
2001
2002
2003

range.max 可能会在将来使用。

零填充

允许输出值根据应用程序的需求进行零填充。

2004
002005
00000000002006

前缀 & 后缀

将一个 前缀 添加到输出值。

ALPHA2007
ALPHA002008
ALPHA00000000002009

suffix 可能会在将来使用。

如何使用

有两种方法可以使用此包

  • Earmarked 使用池中的 默认 值。 默认值已经“标记”。
  • Earmark 创建一个 的值池来使用。 使用新的“Earmark”自定义设置。

可用函数

  • get()
    • 返回一个 单个 格式化的值。
    • 将接受 可选 整数以返回格式化值的数组。
  • unset($value)
    • 接受 格式化 值作为字符串或数组。

简单用法

使用配置文件中的值,使用 Earmarked::get()Earmarked::unset()

$serial = Earmarked::get(); // Returns: '2010'
Earmarked::unset($serial);

您还可以 指定 数组中要返回的值的数量

$serial = Earmarked::get(3); // Returns: [ '2011', '2012', '2013', ]
Earmarked::unset($serial);

高级用法

您可以使用 Earmark() 和以下变量 初始化 一个 的序列

  • 前缀
  • 后缀 (非功能占位符)
  • 填充
  • 最小值
  • 最大值 (非功能占位符)
// Earmark(prefix, suffix, padding, min, max)
$earmark = new Earmark('ZULU', null, 10, 5000, null);
$earmark->get(); // Returns: 'ZULU0000005000'
$earmark->get(3); // Returns: [ 'ZULU0000005001', 'ZULU0000005002', 'ZULU0000005003', ]

新系列不会影响默认系列,再次调用系列 (使用相同参数) 将继续数字序列。

// Default Series
$serial = Earmarked::get(); // Returns: '2014'
$serial = Earmarked::get(3); // Returns: [ '2015', '2016', '2017', ]

// Using Same Parameters Again
$earmark = new Earmark('ZULU', null, 10, 5000, null);
$earmark->get(); // Returns: 'ZULU0000005004'
$earmark->get(3); // Returns: [ 'ZULU0000005005', 'ZULU0000005006', 'ZULU0000005007', ]

工作原理

在一个数字序列的间隔中搜索可能非常耗费资源。取决于序列的大小。

此软件包使用两个(2)表,一个用于已使用数字的序列,另一个用于保留一组可供立即使用的数字。软件包将从保留表中获取下一个连续的数字。

保留表中的可用数字低于三分之一时,此软件包将用更多数字重新填充保留此软件包与 Laravel 队列配合使用效果最佳。

已通过unset()删除的序列中的数字将被添加到保留表中进行重用,以便在更新时使用。 保留表中的数字没有排序,unset()的数字将最终再次可用。

附加功能

自动递增

有时您只想在自动递增序列中获得下一个数字。本软件包中包含了一个。它不支持前缀不会支持后缀,但您可以使用零填充。

不要使用unset()increment()值!已提醒您!

Earmarked::increment(); // Returns: 1
Earmarked::increment(); // Returns: 2
$earmark = new Earmark('ZULU', null, 20, 5000, null);
$earmark->increment(true); // Returns: '00000000000000000003'

贡献

考虑贡献吗?

  1. 分叉并克隆项目:git clone git@github.com:your-username/earmark.git
  2. 运行测试并确保它们通过您的设置:phpunit
  3. 创建您的错误修复/功能分支并编写您的更改。为您的更改添加测试。
  4. 确保所有测试仍然通过:phpunit
  5. 推送到您的分叉并提交新的拉取请求。