Php 如何在laravel中生成自定义主id?
我想在数据库中用增量创建自定义主id,如Php 如何在laravel中生成自定义主id?,php,mysql,laravel,Php,Mysql,Laravel,我想在数据库中用增量创建自定义主id,如 Comp-001 Comp-002 Comp-003 然后增加 Comp-00N您需要设置public$incrementing=false,这样它就不会尝试将主键设置为下一个自动递增的ID值 然后您就可以创建自定义主键了 class Company extends Model { protected $primaryKey = 'id'; public $incrementing = false; // You most pro
- Comp-001
- Comp-002
- Comp-003
Comp-00N您需要设置public
$incrementing=false模型上的代码>,这样它就不会尝试将主键设置为下一个自动递增的ID值
然后您就可以创建自定义主键了
class Company extends Model {
protected $primaryKey = 'id';
public $incrementing = false; // You most probably want this too
}
然后可以为id
$lastCompanyId = Company::select('id')->orderBy('id','desc')->first();
$lastCompanyId=(int)substr($lastCompanyId , -3);
static::created(function ($obj) {
$obj->id= Company::'Comp-'.$lastCompanyId+1;
$obj->save();
});
因为我相信您可以将其设置得更简单,并且根据您所描述的,您实际上只需要此类显示解决方案,所以我决定为您提出一个解决方案:
公司模式
class Company extends Model
{
...
public function getCompanyID()
{
return sprintf('Comp-%03d', $this->id);
}
}
你的观点
处理公司对象时,只需在需要显示时调用您的方法:
$company->getCompanyID();
以下是一些有关其行为的示例:
ID示例和各自的输出:
IDs Outputs
1 Comp-001
45 Comp-045
104 Comp-104
1000 Comp-1000
这样,您将尊重:
->拉威尔自然流
->您保留一个真实的ID引用和一个视觉引用
->您不需要额外的努力来确保找到正确的产品(您将ID保持为整数)
以上是一个简单而快速的解决您的问题的方法
现在我不确定您是如何构造代码的,但如果是我的项目,我甚至不会更改模型,并提供或或Marshaller来获取我的对象,创建一个类似的表示,仅使用我在视图上所需的字段,并传递它
为什么?
->我的模型是一个尽可能纯的模型,没有解析信息(这真的不应该是面向对象的模型职责)
->我在后端和前端之间有一个清晰的转换,我可以很容易地为不同的视图进行更改,而不必接触以前的代码(尊重OOP的开放和关闭法则) 您可以使用
首先安装它:
编写器需要haruncpi/laravel id生成器
在控制器中导入类
use Haruncpi\LaravelIdGenerator\IdGenerator;
现在只需使用它
$id = IdGenerator::generate(['table' => 'your_table_name', 'length' => 8, 'prefix' =>'Comp-']);
输出
Comp-001
Comp-002
Comp-003
...
在插入触发器之前创建一个触发器。到目前为止,您已经尝试过了为什么麻烦呢,surleyComp
位只与用户看到的内容相关,因此,只需将Comp-
位添加到演示层中任何用户可见的信息中。您需要编写自定义代码来创建增量,因为这是一个字符串而不是一个数字。是否可以保留传统的Int-ID,只需创建一个模型方法getID
,将Comp-添加到您的ID中?您可能还需要使用例如creating
将在插入新条目时增加自定义id
值的责任委托给模型。如何以及在何处创建自定义主键?请使用更新的代码进行检查。我希望它能帮助您,但是在哪里使用$id=IdGenerator::generate(['table'=>'your_table_name','length'=>8',prefix'=>'Comp-')代码>在公共函数存储()中或其他地方?是的,在存储方法或模型中。获取完整文档: