我想在Laravel中生成一个唯一的ID。
EX:PO-12010001
我尝试使用谷歌搜索,答案是使用UUID,但听不懂。
答案 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
...