首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在laravel中生成自定义初级id?

如何在laravel中生成自定义初级id?
EN

Stack Overflow用户
提问于 2018-12-20 10:06:00
回答 4查看 11.2K关注 0票数 2

我希望在数据库中创建具有增量的自定义主id,如

  • 康普-001
  • 康普-002
  • 康普-003

然后增加Comp-00N。

EN

回答 4

Stack Overflow用户

发布于 2018-12-20 10:14:23

您需要在模型上设置公共$incrementing = false;,这样它就不会尝试将主键设置为下一个自动递增的ID值。

然后创建自定义主键。

代码语言:javascript
运行
复制
class Company extends Model {

    protected $primaryKey = 'id';
    public $incrementing = false;  // You most probably want this too

}

然后,您可以为id生成自定义值。

代码语言:javascript
运行
复制
$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();
      });
票数 6
EN

Stack Overflow用户

发布于 2018-12-20 13:13:18

因为我相信您可以将此设置得更简单,而且从您所描述的情况来看,您只需要这样的解决方案来展示,所以我决定为您提出一个解决方案:

公司模式

代码语言:javascript
运行
复制
class Company extends Model
{
    ...

   public function getCompanyID()
   {
       return sprintf('Comp-%03d', $this->id);
   }
}

您的视图

在处理Company对象时,只需在需要显示方法时调用它:

代码语言:javascript
运行
复制
$company->getCompanyID();

下面是关于这一行为的几个例子:

ID实例和各自的产出:

代码语言:javascript
运行
复制
IDs             Outputs
 1              Comp-001 
 45             Comp-045 
 104            Comp-104
 1000           Comp-1000

这样你就会尊重:

->拉力自然流;

->您保留了一个真实的ID引用和一个可视引用;

->您不需要额外的努力来确保找到正确的产品(您将ID保持为整数);

上面是一个简单而快速的解决你问题的方法。

现在我不知道您是如何构造代码的,但是如果这是我的项目,我甚至不会更改模型,并提供一个HydratorMarshaller来获取我的对象,用视图上我需要的字段创建一个类似的表示,并将其传递给它。

为什么?

-> Model是一个纯的、没有解析信息的模型(这实际上不应该是OOP的模型响应性);

->我得到了后端和前端之间的一个清晰的转换,我可以很容易地更改不同的视图,而不必触及以前的代码(尊重OOP的开放和闭包规则);

票数 5
EN

Stack Overflow用户

发布于 2019-10-27 09:19:52

您可以使用Laravel ID发生器

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

导入控制器中的类。

代码语言:javascript
运行
复制
use Haruncpi\LaravelIdGenerator\IdGenerator;

现在只需使用它

代码语言:javascript
运行
复制
$id = IdGenerator::generate(['table' => 'your_table_name', 'length' => 8, 'prefix' =>'Comp-']);

输出

代码语言:javascript
运行
复制
Comp-001
Comp-002
Comp-003
...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53866420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档