Laravel自动生成UUID,从建表到使用详解

Laravel自动生成UUID,从建表到使用详解

1. 简介

Laravel是一种用于创建Web应用程序的PHP框架,它的目标是使代码简洁,易于维护和具有高度表现力。Laravel提供了许多实用且强大的功能,一个它的功能就是自动生成UUID。

2. 什么是UUID

UUID是通用唯一标识符的缩写,它是一种128位的值,可以用于唯一标识信息(如记录)。UUID并不依赖于任何中央协调器来生成它们,所以它们可能与其他UUID的生成方式相对独立,例如可以在不同计算机系统上生成UUID。UUID已成为标准,被广泛应用在分布式系统中。

3. Laravel如何自动生成UUID

3.1 建立含UUID字段的数据表

为了使用Laravel自动生成UUID,首先在建立含UUID字段的数据表时,需要在migration文件中添加如下代码:

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

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

//其他字段省略...

});

这里定义了一个名为`uuid`的字段,类型为uuid,是一个128位的值用于唯一标识。并设置该字段为unique,以确保每个值都是唯一的。

3.2 Laravel自动生成UUID

在数据表中添加含UUID字段以后,Laravel可以自动生成UUID了。可以在模型(Model)中添加如下代码:

use Ramsey\Uuid\Uuid;

class MyModel extends Model

{

public $incrementing = false;

protected $primaryKey = 'uuid';

protected static function boot()

{

parent::boot();

static::creating(function ($model) {

$model->{$model->getKeyName()} = Uuid::uuid4()->toString();

});

}

}

在上述代码中,我们使用了Ramsey\Uuid\Uuid类生成UUID,通过组合模型(MyModel)的$primaryKey、$incrementing等属性,使用Laravel框架的事件(Eloquent Event)钩子,即在创建前监听模型中creating事件,即在保存模型前的状态下,为该模型的UUID属性赋值。

4. 如何使用自动生成的UUID

在使用含UUID字段的模型时,可以在Model类中使用如下方式调用:

\App\Models\MyModel::create([

'name' => 'my name',

//其他字段省略...

]);

当执行插入语句时,Laravel会自动生成UUID,并插入到数据表中的UUID字段对应的位置。

5. 总结

Laravel自动生成UUID功能的实现,需要在建表时添加含UUID字段,然后在模型中使用Ramsey\Uuid\Uuid类生成UUID,使得框架监听creating事件,在保存模型前赋值UUID字段。使用自动生成的UUID的方式和普通模型相同,只需要不把UUID作为任何需要填写的数据即可。这样的好处是充分利用UUID分布式系统唯一标识信息的特征,并避免UUID在多个分布式系统中发生冲突的可能性。

后端开发标签