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规则进程自定义时,清晰地注明你排除软删除记录的意图,这将使得代码更容易理解和维护。

目录
相关文章
|
前端开发 API 数据处理
laravel系列(三) Dcat admin框架工具表单以及普通表单的使用
laravel系列(三) Dcat admin框架工具表单以及普通表单的使用
1631 0
|
Python Windows
win64系统安装32位的python解释器和打包成exe程序
本文说明了在win64系统环境下,如何安装32位的python解释器,同时对32位虚拟环境下运行的python程序进行打包,将其打包成可执行的exe程序,以图文相结合的方式记录了操作步骤,供大家参考。
899 0
|
JavaScript
顶象Js的一键还原
顶象Js的一键还原
477 0
|
网络安全 PHP
cURL error 60: SSL certificate problem: self signed certificate in certificate
一、问题 cURL error 60: SSL certificate problem: self signed certificate in certificate chain - 服务器http302 出现这个一般是自签名证书的问题
3635 0
|
API PHP 数据库
Laravel框架下通过DB获取数据并转为数组的方法
通过上述方法,Laravel为开发者提供了一套灵活而强大的工具,用于从数据库中检索数据并将其转换为数组。无论是使用DB Facade直接执行查询,还是利用模型的方法,Laravel都能够简化这一过程,使得代码既简洁又富有表现力。在实际开发中,选择最适合你需求的方法可以有效提高开发效率和应用性能。
300 0
|
安全 PHP 数据库
laravel中模型中$fillable的用法
通过正确使用 `$fillable`属性,开发者可以有效地保护应用免受批量赋值漏洞的影响。它使得只有指定的字段可以被外部用户输入影响,为应用数据的安全性提供了一道防线。在开发使用Laravel框架的应用时,恰当地设置 `$fillable`或 `$guarded`属性是一项最佳实践。
318 1
|
安全 数据管理 PHP
详尽解析:如何在 Laravel 中实现软删除
【8月更文挑战第31天】
446 0
|
5月前
|
存储 消息中间件 弹性计算
阿里云服务器ECS计算型c7和通用算力型u1在适用场景、计算性能、网络与存储性能等方面的对比
阿里云ECS服务器u1和c7实例在适用场景、性能、处理器特性等方面存在显著差异。u1为通用算力型,性价比高,适合中小企业及对性能要求不高的场景;c7为企业级计算型,采用最新Intel处理器,性能稳定且强大,适用于高性能计算需求。u1支持多种CPU内存配比,但性能一致性可能受底层平台影响;c7固定调度模式,确保高性能与稳定性。选择时可根据预算与性能需求决定。
279 23
|
11月前
|
关系型数据库 MySQL Linux
宝塔面板BT Composer安装及使用教程
本文介绍,相信你已经掌握了在宝塔面板上安装和使用 Composer 的方法。希望这些内容能对你有所帮助,祝你在开发过程中一切顺利!
2223 2
|
存储 对象存储
【阿里云OSS】You have no right to access this object because of bucket acl.
【阿里云OSS】You have no right to access this object because of bucket acl.
17963 1
【阿里云OSS】You have no right to access this object because of bucket acl.