使用Laravel制作唯一的ID

时间:2019-04-06 12:51:41

标签: php laravel laravel-5

我想在Laravel中生成一个唯一的ID。

EX:PO-12010001

  • PO =产品
  • 12 =月,
  • 01 =年,
  • 0001 =产品ID。

我尝试使用谷歌搜索,答案是使用UUID,但听不懂。

6 个答案:

答案 0 :(得分:2)

您的ID末尾将始终为4位数字,因此我们可以使用substr()提取最后四个字符。当您将其递增一时,它将失去其填充。 0001+1=2这样。因此,我们使用str_pad()将其填充回去,长度为四。

$string = 'PO-12010001';
$id = substr($string, -4, 4);

$newID = $id+1;
$newID = str_pad($newID, 4, '0', STR_PAD_LEFT);

echo "PO-1201".$newID;

答案 1 :(得分:1)

由于尚不清楚最后4个字符(产品ID)的来源,因此根据其来源会有2种不同的结果,我假设“ PO”在您所有产品中都是常数:

1。如果要自动生成产品ID:

$id = "PO-".date('my') . substr(uniqid(), 9, 12);

date('my')将返回当月的两位数形式和当年的两位数形式。 uniqid()根据当前时间(以微秒为单位)返回唯一的标识符,该标识符通常是字母和数字的组合,并且通常为13个字符长,因此我们使用substr()仅返回最后4个字符字符串中的字符。

注意:我们使用的是uniqid()的最后一个字符,因为它们每毫秒改变一次。

2。如果您已经有了产品ID:

$id = "PO-".date('my') . $product_id;

答案 2 :(得分:0)

首先遇到这种情况时,您要如何制作自己的ID 物品种类 月 年 产品ID

在控制器中获取产品类型

如果产品= PO / 服务= SE

使用PHP创建新日期

 $date2 = date('Y-m-d'); 

并根据您的要求获取日期子字符串,并获取产品表的最后一个ID,并合并所有变量并用作唯一ID。

答案 3 :(得分:0)

首先,我不知道。因此,也许它具有类似的概念。但是无论如何,用户定义的+设计的唯一性很可能不是唯一性。

我的建议是让数据库使用自动增量功能创建唯一的ID。通常,这是在多任务环境中保证独特想法的唯一方法。

第二步,您可以创建一个人类可读的ID,并将其用于在suer界面上显示它。这样的查询可以是这样的:

update table set nice_id = concat("prefix-",main_id) 
where main_id = $last_inserted_id

...或任何其他基于计算自月初以来相同条目数的计算。

还有其他基于尝试创建一个nice_id并将其插入数据库的解决方案,如果失败,则创建下一个..并循环直到成功。但是,通过自动递增创建的简单整数在查询和键上的性能更高。

答案 4 :(得分:0)

它被称为人工代码,可以在db表中的ID列旁边进行唯一标识。

$idColumn = 1;
$dateCode = date('ym');
$newHumanCode = 'PO-'.$dateCode.substr('0000'.$idColumn, -4);
return $newHumanCode;

您还可以使用随机数代替$ idColumn, 例如:

$idColumn  = mt_rand();

答案 5 :(得分:0)

您可以使用Laravel ID generator

首先安装它: composer require haruncpi/laravel-id-generator

将类导入控制器。

use Haruncpi\LaravelIdGenerator\IdGenerator;

现在只需使用

$prefix = "PO-".date("my");  
$id = IdGenerator::generate(['table' => 'your_table_name', 'length' => 11, 'prefix' =>$prefix]);

输出

PO-12010001
PO-12010002
PO-12010003
...