Laravel中如何实现数据去重及唯一性验证?
- 内容介绍
- 文章标签
- 相关推荐
本文共计903个文字,预计阅读时间需要4分钟。
在数据库字段上直接使用 `UNIQUE` 约束是一种去重策略,适用于 Laravel。但是,ORM 层的校验(例如 `unique` 规则)只是进行预先检查,并不能防止并发写入时的冲突。即,如果有两个请求几乎同时通过校验并尝试插入数据,可能会发生重复插入的情况。
- 用
php artisan make:migration add_unique_index_to_users_email新建迁移 - 在
up()方法里写:Schema::table('users', function (Blueprint $table) { $table->unique('email'); }); - 执行
php artisan migrate,之后数据库会拒绝重复email插入,并抛出Illuminate\Database\QueryException - 注意:如果该字段已有重复数据,迁移会失败,得先手动清理或用
DB::statement()加IGNORE选项处理
Laravel 的 unique 验证规则怎么避开“自己”
更新场景下,unique:users,email 会把当前模型也当成待校验对象,导致改自己的邮箱都报错。必须显式排除自身 ID。
本文共计903个文字,预计阅读时间需要4分钟。
在数据库字段上直接使用 `UNIQUE` 约束是一种去重策略,适用于 Laravel。但是,ORM 层的校验(例如 `unique` 规则)只是进行预先检查,并不能防止并发写入时的冲突。即,如果有两个请求几乎同时通过校验并尝试插入数据,可能会发生重复插入的情况。
- 用
php artisan make:migration add_unique_index_to_users_email新建迁移 - 在
up()方法里写:Schema::table('users', function (Blueprint $table) { $table->unique('email'); }); - 执行
php artisan migrate,之后数据库会拒绝重复email插入,并抛出Illuminate\Database\QueryException - 注意:如果该字段已有重复数据,迁移会失败,得先手动清理或用
DB::statement()加IGNORE选项处理
Laravel 的 unique 验证规则怎么避开“自己”
更新场景下,unique:users,email 会把当前模型也当成待校验对象,导致改自己的邮箱都报错。必须显式排除自身 ID。

