Laravel unique规则更新时需用ignore($id, 'field')跳过当前记录,主键非id须传字符串;联合唯一必须用Rule::unique()->where()并建对应复合索引。

laravel unique规则怎么跳过当前记录的ignore参数写法
更新数据时,unique 校验默认会把当前行也当“重复”拦掉,必须显式告诉它“这条除外”。ignore 是唯一可靠方式,但参数顺序和类型极易出错。
-
ignore第一个参数是主键值(如$user->id),第二个是字段名(如'email'),顺序反了就失效 - 如果主键不是
id,比如用uuid,必须传字符串,不能传对象:ignore($user->uuid, 'uuid'),传$user会报错 - 批量更新或表单含多个模型时,别图省事写成
ignore(request('id'))—— 没做空值/类型校验,整数ID被当成字符串可能匹配失败 - Laravel 9+ 支持数组语法:
['unique:users,email,ignore,id'],但可读性差,调试困难,不推荐
联合唯一校验必须用Rule::unique()构造器
unique 规则原生不支持多字段联合,直接写 'unique:users,username,email' 是错的 —— 它只会查 username 字段,email 被当成了表名。
- 必须用
Rule::unique('users')->where(fn ($query) => $query->where('status', 'active'))手动加条件 - 联合唯一实际是“WHERE 字段A = ? AND 字段B = ?”,所以得组合
where:Rule::unique('users')->where('category_id', request('category_id')) - 如果联合字段里有空值(如
tenant_id可为 null),MySQL 会跳过该行索引匹配,导致校验失效 —— 必须确保数据库索引包含所有联合字段且不含 nullable 列,或提前过滤 - 不要在
where里用request(),应从验证上下文取值,避免请求篡改:用$data['category_id']或$validator->getData()
API请求中ignore动态获取主键的坑
API 通常用 URL 参数(如 /api/users/{id})传主键,但 ignore 不自动解析路由绑定,硬编码会错。
Laravel Cloud(cloud.laravel.com)。此技能用于处理所有 Laravel Cloud 请求,包括搜索和读取数据。只要任务涉及 Laravel Cloud,即使用此技能。
- 别写
ignore(request()->route('id'))—— 路由未匹配或参数名不对时返回 null,校验直接跳过 - 稳妥做法是先确认模型实例存在:
$user = User::find(request('id'));,再用ignore($user->id);没查到就让验证器走不到这步 - 如果用隐式路由模型绑定(
public function update(Request $request, User $user)),直接用ignore($user->id)最安全 - 注意软删除模型:若
$user已软删,find()默认查不到,但withTrashed()后 ignore 的 ID 仍会被校验逻辑排除 —— 这符合业务预期,无需额外处理
数据库索引没建对,Laravel校验就是摆设
哪怕 PHP 层规则写得再准,如果 MySQL 没建联合唯一索引,高并发下照样能插出重复数据。
-
unique:users,username要求数据库有UNIQUE KEY `users_username_unique` (`username`) - 联合唯一必须显式建复合索引:
Schema::table('users', function (Blueprint $table) { $table->unique(['category_id', 'slug']); }); - 迁移里只加
->unique()不够,得确认生成的 SQL 真是UNIQUE KEY (...),不是INDEX—— 后者不阻止插入 - 线上改索引要锁表,尤其大表。别在验证器里“先查再插”,那是竞态漏洞,必须靠数据库约束兜底
最常漏的是索引字段顺序和 null 值处理 —— unique(category_id, slug) 和 unique(slug, category_id) 效果不同,前者无法加速 WHERE slug = ? 查询;而任一字段为 null,联合索引就失效,校验形同虚设。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










