有没有一种方法可以为Laravel 5.8创建自定义UUID前缀?

时间:2019-05-22 19:53:06

标签: php laravel laravel-5

我想在Laravel中为UUID添加一个自定义前缀,以帮助更好地跟踪数据库条目。当前,当被调用时,uuid();函数将产生如下表项:

6ab4a8c-9597-lle7-a63c-0242c100426l

但是我希望能够在该表中的每个uuid条目前面添加一个前缀。例如,“用户”表中的“用户”将具有以 UUID 为前缀的uuid:

UUID-6ab4a8c-9597-lle7-a63c-0242c100426l

,并且帖子将以 PUID 前缀保存在“帖子”表中:

PUID-6ab4a8c-9597-lle7-a63c-0242c100426l

以表示(“发布”唯一标识符)。


“用户”表的默认迁移如下:

Schema::create('users', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->string('name');
    $table->string('email')->unique();
    $table->timestamp('email_verified_at')->nullable();
    $table->string('password');
    $table->rememberToken();
    $table->timestamps();
});

要使用UUID,将使用以下内容:

Schema::create('users', function (Blueprint $table) {

    $table->uuid('uuid')->primary();

});


我不确定定义UUID的模型存储在哪里,也不确定要修改 entire 模型。

理想情况下,将使用表名和前缀来定义uuid:

$table->uuid('puid', 'PUID')->primary();

有人知道如何实现吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

您可以使用访问器和更改器来实现前端所需的功能,但是数据库将包含UUID格式的值,因为它是UUID列。

在您的Users模型中:

public function getUuidAttribute($value)
{
    return "UUID-".$value;
}

public function setUuidAttribute($value)
{
    $this->attributes['uuid'] = str_replace("UUID-", "", $value);
}

并在您的Posts模型中:

public function getPuidAttribute($value)
{
    return "PUID-".$value;
}

public function setPuidAttribute($value)
{
    $this->attributes['puid'] = str_replace("PUID-", "", $value);
}

当您转储UUID-6ab4a8c-9597-lle7-a63c-0242c100426l时,您会看到$user->uuid,而$post->puid的前缀为PUID-也会发生。

否则,您应该自己生成UUID,并将它们另存为字符串在数据库中。