Laravel如何验证唯一性_Laravel数据库规则验证【表单】

梦辰同学_7839

梦辰同学_7839

2026-04-24

502人浏览

原创

unique规则校验字段唯一性,默认查指定表对应列并忽略软删除记录;更新时需用ignore排除自身,支持where添加多条件限定,须配合数据库唯一索引应对并发竞态。

laravel如何验证唯一性_laravel数据库规则验证【表单】

验证字段在数据库中是否唯一(unique 规则基础用法)

直接用 unique 规则就能检查某字段在指定表里是否存在重复值。它默认校验当前字段名对应的列,比如字段叫 email,就查 users.email。

常见写法:

['email' => 'required|unique:users']

注意点:

  • 表名必须小写,Laravel 不会自动转换驼峰或下划线命名的表名
  • 如果模型使用了非默认连接(如 mysql2),需显式指定:unique:users,email,0,id,connection,mysql2
  • 不加其他参数时,unique 会忽略软删除记录(即 deleted_at IS NULL 自动生效)

排除当前记录(更新场景下的 ignore 参数)

表单编辑时,提交的邮箱没变,但 unique:users 会把它当成新记录查重,导致“自己不能保存”。必须用 ignore 排除自身。

推荐写法(传入主键值):

['email' => 'required|unique:users,email,' . $user->id]

更安全的写法(避免 ID 被篡改):

['email' => ['required', Rule::unique('users', 'email')->ignore($user)]]

关键差异:

  • 字符串写法中第三个参数是 id 值,第四个参数才是 id 字段名(默认就是 id,可省略)
  • Rule::unique() 方式能自动适配主键名(比如用 uuid 当主键也不用额外指定)
  • 若用字符串写法却漏掉 $user->id,更新时必报“已存在”错误

跨字段、多条件唯一性(where 条件组合)

有些业务要求“同一公司下邮箱唯一”,不能只查全局。这时得加查询条件,用 where 限定范围。

Laravel Creem Agent
Laravel Creem Agent

Creem 支付商店助理 — 查询订阅、客户、交易、产品,执行心跳检查,管理本地 Laravel支付商店。

下载

字符串写法(注意引号和逗号顺序):

'email' => 'unique:users,email,NULL,id,company_id,' . $companyId

更清晰的 Rule 写法:

Rule::unique('users', 'email')->where(fn ($q) => $q->where('company_id', $companyId))

容易踩的坑:

  • 字符串方式里,NULL 是占位符,表示跳过主键排除逻辑;别误写成 null 或空字符串
  • 多个 where 条件要用链式调用,不能在一个 where() 里塞数组(那会变成 WHERE IN)
  • 如果 $companyId 可能为空,得提前判断,否则生成的 SQL 会查 company_id = NULL(不是 IS NULL)

自定义错误消息与中文提示

Laravel 默认的 The :attribute has already been taken. 对用户不友好。中文项目必须覆盖。

最简方案:在 resources/lang/zh/validation.php 中添加:

'unique' => ':attribute 已被占用。'

进阶控制(仅对某字段定制):

['email' => 'required|unique:users']

对应消息:
'email.unique' => '邮箱已被注册,请换一个'

注意:

  • 键名必须严格匹配规则顺序,email.unique 比 unique 优先级高
  • 如果用了 Rule::unique() 但没写 ->message(...),仍走语言包配置
  • 不要在验证规则里拼接中文(如 'unique:users|邮箱已被占用'),Laravel 不识别

唯一性验证真正难的不是写法,而是边界:软删除数据要不要参与校验、多租户下如何动态绑定租户 ID、并发写入时的竞态——这些靠 unique 规则本身解决不了,得结合数据库唯一索引 + 应用层重试或事务兜底。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

laravel

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
laravel组件介绍
laravel组件介绍

laravel 提供了丰富的组件,包括身份验证、模板引擎、缓存、命令行工具、数据库交互、对象关系映射器、事件处理、文件操作、电子邮件发送、队列管理和数据验证。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

2024.04.09

837

10

laravel中间件介绍
laravel中间件介绍

laravel 中间件分为五种类型:全局、路由、组、终止和自定。想了解更多laravel中间件的相关内容,可以阅读本专题下面的文章。

2024.04.09

815

9

laravel使用的设计模式有哪些
laravel使用的设计模式有哪些

laravel使用的设计模式有:1、单例模式;2、工厂方法模式;3、建造者模式;4、适配器模式;5、装饰器模式;6、策略模式;7、观察者模式。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

2024.04.09

2468

10

thinkphp和laravel哪个简单
thinkphp和laravel哪个简单

对于初学者来说,laravel 的入门门槛较低,更易上手,原因包括:1. 更简单的安装和配置;2. 丰富的文档和社区支持;3. 简洁易懂的语法和 api;4. 平缓的学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.10

3761

7

laravel入门教程
laravel入门教程

本专题整合了laravel入门教程,想了解更多详细内容,请阅读专题下面的文章。

2025.08.05

5330

22

laravel实战教程
laravel实战教程

本专题整合了laravel实战教程,阅读专题下面的文章了解更多详细内容。

2025.08.05

3576

13

laravel面试题
laravel面试题

本专题整合了laravel面试题相关内容,阅读专题下面的文章了解更多详细内容。

2025.08.05

6729

7

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

2026.03.04

1396

29

Laravel 框架安装指南
Laravel 框架安装指南

本指南详解 Laravel 框架安装全流程,涵盖 PHP 8.1+ 环境配置、Composer 依赖管理工具安装及国内镜像源优化。重点演示使用 composer create-project 命令创建 Laravel 10/11 项目,解决常见安装错误与依赖冲突。从环境搭建到项目初始化,助您快速完成 Laravel 开发环境部署,为后续 Web 应用开发奠定基础。适合 PHP 初学者与框架迁移开发者参考。

2026.04.09

195

6

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
如何安装 Composer
如何安装 Composer

共1课时 | 200人学习

Composer手册
Composer手册

共0课时 | 0人学习