在Laravel中使用UUID作为主键需修改迁移文件将主键设为uuid类型,模型中通过creating事件自动生成UUID,推荐使用ramsey/uuid库提升性能,查询时传入标准格式UUID字符串即可。
在Laravel中使用UUID作为模型主键,可以避免暴露数据真实ID,提升安全性,同时支持分布式系统下的唯一性需
求。下面介绍如何在Laravel模型中使用UUID作为主键并自动生成。
要让模型使用UUID作为主键,首先需要修改数据库迁移文件,将主键类型从默认的自增整数改为UUID。
示例迁移代码: ```php Schema::create('posts', function (Blueprint $table) { $table->uuid('id')->primary(); // 使用UUID为主键 $table->string('title'); $table->text('content'); $table->timestamps(); }); ```Laravel模型可以通过重写 boot 方法或使用 creating 事件监听,在创建记录时自动生成UUID。
在模型中添加以下代码: ```php use Illuminate\Support\Str; use Illuminate\Database\Eloquent\Model;class Post extends Model { protected static function boot() { parent::boot();
static::creating(function ($model) {
if (!$model->id) {
$model->id = (string) Str::uuid();
}
});
}}
Laravel自带的 Str::uuid() 基于OpenSSL生成,若需更高性能和标准兼容性,可安装ramsey/uuid。
安装命令: ```bash composer require ramsey/uuid在模型中使用:
use Ramsey\Uuid\Uuid;
static::creating(function ($model) {
if (!$model->id) {
$model->id = (string) Uuid::uuid4();
}
});查询方式与普通主键一致,直接传入UUID字符串即可。
```php $post = Post::find('a1b2c3d4-e5f6-7890-g1h2-i3j4k5l6m7n8'); ```基本上就这些。只要改迁移、设主键、模型里绑定创建事件,就能顺利用上UUID。
# php
# database
# 数据库
# 主键
# 自动生成
# 就能
# 设为
# 推荐使用
# 可以通过
# 更高
# 重写
# 要让
# table
# 事件
# laravel
# 前端
# composer
# ssl
# 分布式
# Static
# String
# 字符串
# class
# protected
# function
# 可选