hexify/laravel-id-customizer

一个用于自定义ID格式的laravel包。

安装: 9

依赖者: 0

建议者: 0

安全性: 0

星星: 2

观察者: 0

分支: 0

类型:laravel-package

v1.0.0 2022-04-12 16:51 UTC

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 ..., 重置前缀更改时为false

    STD-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