hexify / laravel-id-customizer
一个用于自定义ID格式的laravel包。
Requires
- php: ^8.0.2
- doctrine/dbal: ^3.3.5
- illuminate/database: ^8.0|^9.0
- illuminate/support: ^8.0|^9.0
This package is auto-updated.
Last update: 2024-09-12 22:17:24 UTC
README
一个用于自定义ID格式的laravel包。
在许多laravel应用程序中,对于某些模型,使用标准的ID生成行为并不是一个好的主意。这就是为什么许多开发者喜欢生成带前缀的自增应用ID,而有些人则喜欢以自定义格式生成他们的唯一ID。
这个包将帮助您生成自定义主键或自定义ID的任何表字段。
安装
composer require hexify/laravel-id-customizer
使用
您可以通过使用特质在控制器或模型内部使用它。
首先在控制器中导入ID定制器 use Hexify\LaraIdCustomizer\IdCustomizer;
.
然后在您的函数中
public function store(Request $request){
$config = [
'model' => Student::class,
'column' => 'uid',
'length' => 10,
'prefix' => date('ym')
];
$uid = IdCustomizer::generate($config);
$student = new Student();
$student->uid = $uid; // a fillable field.
$student->name = $request->input('name');
...
$student->save();
}
在您的模型中
-实现接口 Hexify\LaraIdCustomizer\IdFactory;
-添加特质 Hexify\LaraIdCustomizer\Traits\HasIdFactory;
.
...
use Hexify\LaraIdCustomizer\IdFactory;
use Hexify\LaraIdCustomizer\Traits\HasIdFactory;
class Student extends Model implements IdFactory {
...
use HasIdFactory;
...
}
在您的模型中添加以下数组以自定义 uid
字段值。
/**
* The configs that used for generating custom ID.
*
* @var array
*/
private static $idFactoryConfig =
\\******************* INCREMENTAL *******************
[
'factory_method' => self::INCREMENTAL, \\ Optional. Default is self::INCREMENTAL.
'column' => 'uid', \\ Default is 'id'.
'length' => 10, \\ Default is 10.
'prefix' => 'STD-', \\ Or for example 'USR-'. Default is ''.
'reset_on_prefix_change' => false, \\ Default is true.
];
\\********************* RANDOM **********************
[
'factory_method' => self::RANDOM,
'column' => 'uid',
'length' => 10,
'prefix' => '',
'set' => self::NUMERIC, \\ Or self::ALPHA | self::ALPHA_NUMERIC. Default is self::ALPHA_NUMERIC.
'extra' => 'abcdef', \\ Default is ''.
];
或者 private static $idFactoryConfig = [];
为默认配置。
参数说明
有两种方法可以生成自定义ID: 'INCREMENTAL' 和 'RANDOM'。
-
增量如
STD-0001
STD-0002
USR-0003
..., 重置前缀更改时为falseSTD-0001
STD-0002
USR-0001
..., 重置前缀更改时为true -
随机如
STD-4a67
STD-cc32
STD-19B5
..., 使用 'ALPHA_NUMERIC' 字符STD-9458
STD-3498
STD-7453
..., 使用 'NUMERIC' 字符STD-agKe
STD-BvtM
STD-crrQ
..., 使用 'ALPHA' 字符
每种方法都必须有 model
, column
, length
, prefix
model
: 您的模型类,例如: Student::class
.
column
: 可选,默认为模型键名。
length
: ID长度。可选,默认为10。
prefix
: 定义您的前缀。它可以是一个年份、月份或任何自定义字母。可选。
注意,如果'column'类型是(int、integer、bigint或numeric),则'prefix'也必须是数字。
-
在'INCREMENTAL'方法中添加以下选项
reset_on_prefix_change
: 可选,默认为true。如果要在前缀更改时将column
值重置为1,则将其设置为true。 -
或在'RANDOM'方法中添加以下选项
set
: 可选,默认为 'ALPHA_NUMERIC'。是用于生成随机值的字符集。
extra
: 可选,向set
选项添加额外字符。
示例
=> 增量
- 示例 01: 生成 'STD-0001' ID,前缀为非数字值,因此您的列应为varchar类型。
IdCustomizer::generate(
[
'model' => Student::class,
'length' => 8,
'prefix' => 'STD-'
]
);
- 示例 02: 'YYMM00001' ID。
IdCustomizer::generate(
[
'model' => Invoice::class,
'length' => 9,
'prefix' => date('ym')
]
);
Out put => 220300001
- 示例 03: 确定所需的列。
IdCustomizer::generate(
[
'model' => User::class,
'column' => 'uid',
'length' => 10,
'prefix' => date('ym')
]
);
Out put => 2203000001
- 示例 04: 如果不想在前缀更改时重置标识符。
IdCustomizer::generate(
[
'model' => User::class,
'column' => 'uid',
'length' => 10,
'prefix' => date('ym'),
'reset_on_prefix_change' => false
]
);
Out put => 2204000002
=> 随机
- 示例 01: 'IMG-k9C42a' ID。
IdCustomizer::generate(
[
'factory_method' => IdCustomizer::RANDOM,
'model' => Media::class,
'length' => 10,
'prefix' => 'IMG-',
'set' => IdCustomizer::ALPHA_NUMERIC
]
);
Out put => IMG-k9C42a
- 示例 02: 'USR-YYMM****' ID。
IdCustomizer::generate(
[
'factory_method' => IdCustomizer::RANDOM,
'model' => User::class,
'length' => 13,
'prefix' => 'USR-'.date('ym'),
'set' => IdCustomizer::NUMERIC
]
);
Out put => USR-22035673
- 示例 03: 定义自定义
set
。
IdCustomizer::generate(
[
'factory_method' => IdCustomizer::RANDOM,
'model' => User::class,
'column' => 'uid',
'length' => 10,
'prefix' => 'U-'
'set' => 'ABCDabcd1234'
]
);
Out put => U-Ac32Dbb4
- 示例 04: 向
set
添加额外字符。
IdCustomizer::generate(
[
'factory_method' => IdCustomizer::RANDOM,
'model' => User::class,
'column' => 'uid',
'length' => 10,
'prefix' => 'S-'
'set' => IdCustomizer::NUMERIC,
'extra' => 'abcdef'
]
);
Out put => S-f059ba01