Laravel 验证在更新相同的唯一值时抛出错误

Posted

技术标签:

【中文标题】Laravel 验证在更新相同的唯一值时抛出错误【英文标题】:Laravel validation throws error on updating same unique value 【发布时间】:2021-07-20 15:26:50 【问题描述】:

我有一个输入 name 的表单。我想通过该表单更新数据库表。唯一的条件是,name 必须是唯一的。所以这就是我在后端验证所做的:

$this->validate($request, [
    'name' => 'required|unique:myTableName'
]);

它按预期工作。当我尝试输入数据库中已存在的名称时,它会引发此错误"The name has already been taken."。但是我遇到的问题是,当我从数据库中更新相同的条目而不做任何更改时(即我去编辑表单,什么都不做,更新表单),它向我显示了同样的错误。在这种情况下,我不希望出现错误,因为我正在更新相同的值。如何通过 laravel 验证实现这一点?

【问题讨论】:

这能回答你的问题吗? Laravel: Validation unique on update 【参考方案1】:

您必须使用以下代码

$this->validate($request, [
    'name' => ['required', Rule::unique('myTableName')->ignore($yourVariable->id)],
]);

在代码下方添加标题部分

use Illuminate\Validation\Rule;

More Details here

【讨论】:

【参考方案2】:

您需要传递表 id,以从验证中忽略该字段

'name' => 'required|unique:myTableName,name,' . $table->id,

使用自定义规则:

use Illuminate\Validation\Rule;

'name' => ['required', Rule::unique('myTableName', 'name')->ignore($table->id)],

【讨论】:

以上是关于Laravel 验证在更新相同的唯一值时抛出错误的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Blade If 语句在使用 Guard 进行身份验证检查时抛出非对象属性错误

Laravel / Lumen formRequest 在提交所有有效值时抛出错误

Flutter 在验证表单时抛出错误

在 laravel 中更新数据时显示错误的唯一键验证

Undertow 上传多部分文件超过设置值时抛出 RuntimeException

WCF 客户端在证书验证中使用自登录时抛出 System.ServiceModel.Security.MessageSecurityException 错误