我想在数据库中以类似的增量创建自定义主ID
然后递增 Comp-00N
答案 0 :(得分:2)
您需要在模型上设置公用$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();
});
答案 1 :(得分:2)
因为我相信您可以设置得更简单,并且根据您的描述,您只需要这种显示解决方案,所以我决定为您提出解决方案:
公司型号
class Company extends Model
{
...
public function getCompanyID()
{
return sprintf('Comp-%03d', $this->id);
}
}
您的视图
在处理 Company 对象时,只需在需要显示它时调用您的方法即可。
$company->getCompanyID();
下面是一些有关其行为的示例:
ID示例和相应的输出:
IDs Outputs
1 Comp-001
45 Comp-045
104 Comp-104
1000 Comp-1000
这样,您将尊重:
-> Laravel自然流;
->您保留真实的ID参考和视觉参考;
->您无需付出额外的努力来确保找到正确的产品(将ID保留为整数);
以上是解决问题的一种简单快捷的方法。
现在我不确定您如何构造代码,但是如果是我的项目,我什至不更改模型,并提供 Hydrator 或 Marshaller 要抓住我的对象,请仅在视图上使用我需要的字段创建类似的表示形式,然后将其传递。
为什么?
->我的模型尽可能纯,没有解析信息(实际上不应该是模型对OOP的责任);
->我在后端和前端之间有了清晰的转换,并且可以轻松地针对不同的视图进行更改,而无需触及先前的代码(尊重OOP的打开和关闭法则);
答案 2 :(得分:0)
您可以使用Laravel ID generator。
首先安装它:
boxplot.stats
将类导入控制器。
barplot
现在只需使用
composer require haruncpi/laravel-id-generator
输出
use Haruncpi\LaravelIdGenerator\IdGenerator;