laravel表单验证的exists、unique去除软删除字段的校验

简介: 虽然Laravel的验证系统非常强大和灵活,但在处理软删除数据时仍需要特别注意。通过正确使用验证规则,并在需要时创建自定义验证规则,你可以确保应用的数据验证既准确又高效。记得在对 `unique`和 `exists`规则进程自定义时,清晰地注明你排除软删除记录的意图,这将使得代码更容易理解和维护。

在开发Laravel应用时,表单验证是确保数据完整性和安全性的关键步骤之一。Laravel提供了强大灵活的验证规则,其中 existsunique是用于检查数据库中数据存在性和唯一性的常用验证规则。不过,当我们的数据模型使用了软删除功能(即使用 SoftDeletes)时,使用这些验证规则默认会包含软删除的记录,这在某些场景下并不是我们所期望的。因此,我们需要对这些规则进行自定义扩展,以排除软删除的记录。

软删除概览

在Laravel中,使用 SoftDeletes能使得模型在被删除时,并不真正从数据库中移除,而是设置了一个 deleted_at字段来标记该记录已被软删除。查询软删除模型时,默认不会包含这些已标记为软删除的记录。

exists 验证去除软删除字段的校验

当你使用 exists规则进行数据验证时,如果想要排除软删除的数据,可以通过自定义查询条件来实现。

// 假设我们验证 users 表中的 email 字段,但要排除软删除的记录
'required|email|exists:users,email,NULL,id,deleted_at,NULL'

在这个规则中,exists的基本语法是 exists:table,column,except,column,value,...,我们在最后添加了 deleted_at,NULL这个条件,这样就能排除那些 deleted_at列不为 NULL(即已软删除)的记录。

unique 验证去除软删除字段的校验

相对于 exists规则,unique规则的调整稍微有一点不同,因为 unique规则主要用于确保数据库表中指定字段值的唯一性,如果需要排除软删除记录,我们同样需要自定义查询条件。

// 假设我们在 users 表中验证 email 字段的唯一性,同时要排除软删除的记录
'email|unique:users,email,NULL,id,deleted_at,NULL'

在这个 unique规则中,我们通过在条件中指定 deleted_at,NULL来忽略软删除的数据。

自定义验证规则

如果你发现你需要频繁在验证规则中排除软删除的记录,可以考虑定义自定义验证规则,这能使代码更加整洁、复用性更高。

AppServiceProvider或者专门的 ValidationServiceProvider中,你可以使用 Validator::extend方法来扩展自定义验证规则。例如,你可以定义一个名为 unique_without_trashed的规则。

use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Validator;

class ValidationServiceProvider extends ServiceProvider
{
    public function boot()
    {
        Validator::extend('unique_without_trashed', function ($attribute, $value, $parameters, $validator) {
            // 自定义验证逻辑
        });
    }
}

在这个自定义验证中,你可以通过Laravel的查询构造器或Eloquent来实现排除软删除记录的唯一性检查逻辑。

总结

虽然Laravel的验证系统非常强大和灵活,但在处理软删除数据时仍需要特别注意。通过正确使用验证规则,并在需要时创建自定义验证规则,你可以确保应用的数据验证既准确又高效。记得在对 uniqueexists规则进程自定义时,清晰地注明你排除软删除记录的意图,这将使得代码更容易理解和维护。

目录
相关文章
|
8月前
|
前端开发 API PHP
PHP网编程:guzzle的鉴权和异步操作实践。
Guzzle是一个强大且灵活的HTTP客户端库,它可以方便地发送HTTP请求,并且其对异步请求和各类鉴权方式的支持使其成为处理HTTP请求的理想工具。你需要了解和掌握Guzzle的异步操作并发请求和鉴权方式,以便在实际的开发中得心应手地处理HTTP请求。
255 13
|
5月前
|
移动开发 API
阿里云最新域名优惠口令获取、使用、注意事项解析
最近两年,域名注册管理机构(Verisign)多次上调.com中英文域名注册和续费价格,目前阿里云域名注册价格中,其中.com域名注册收费标准为85元1年,续费收费标准为95元1年。不过,阿里云深知用户的需求,特别为用户提供了多种域名优惠口令。本文将为大家详细介绍阿里云最新域名优惠口令的获取及使用教程和注意事项,帮助大家更好地利用这些优惠,降低域名使用成本。
|
关系型数据库 MySQL Linux
宝塔面板BT Composer安装及使用教程
本文介绍,相信你已经掌握了在宝塔面板上安装和使用 Composer 的方法。希望这些内容能对你有所帮助,祝你在开发过程中一切顺利!
2698 2
|
弹性计算 网络协议 数据库
在阿里云国际站上解析域名到服务器详细教程
在阿里云国际站上解析域名到服务器详细教程
|
算法 程序员
理解操作系统内存管理:页面置换算法全解析
大家好,我是小米,热爱分享技术的大哥哥!今天聊的是操作系统中的页面置换算法。它解决的是内存满载时,如何选择合适的页面移出以腾出空间的问题。主要有三种算法:FIFO(先进先出),简单但性能不佳;LRU(最近最久未使用),考虑时间局部性,性能较好但实现较复杂;OPT(最佳置换),理论上最优但无法实际应用。这些算法各有千秋,在实际应用中需根据场景选择最合适的方案。希望这能帮大家更好地理解内存管理的核心机制!
598 2
|
SQL 关系型数据库 PHP
深入理解 Laravel 的 ORM:Eloquent
【8月更文挑战第31天】
524 0
|
PHP 开发者
深入理解PHP7的返回类型声明
【5月更文挑战第27天】 在PHP7中,引入了一项新的语言特性——返回类型声明。这一功能允许开发者在函数定义时明确指定函数应返回的数据类型,从而提升代码的可读性和健壮性。本文将深入探讨返回类型声明的概念、用法以及其对现有PHP项目的影响,旨在为PHP开发者提供一份详细的技术解析和实践指南。
|
缓存 搜索推荐 Java
Java中的服务器端渲染(SSR)原理与实现
Java中的服务器端渲染(SSR)原理与实现
|
Kubernetes JavaScript 前端开发
Java使用Minio以及Linux安装部署Minio
Java使用Minio以及Linux安装部署Minio
299 0
|
存储 程序员 Python
1行Python代码,把PPT转成图片,python-office功能更新~
pip install python-office,自动化办公,赶紧试试~
623 0
1行Python代码,把PPT转成图片,python-office功能更新~