首页 > 解决方案 > Laravel 唯一验证,仅当值不同且没有 id 时

问题描述

我正在尝试更新数据,为此我在表单上使用了方法补丁。

更新验证请求

use Illuminate\Validation\Rule;

'question' => [
    'required',
    'string',
    Rule::unique('faqs_questions','question'),
    'max:30',
],

如果我的问题没有变化,它会给我一个错误:

问题已经提出。

dd($this->toArray())验证请求让我低于输出:

array:9 [▼
    "_method" => "PATCH"
    "_token" => "LLqlQfMpzSdyAInVOaqs5lqBMbEvNT9eMDU9ZZxJ"
    "my_name_TOApMPqqwwBasdts9bLa" => null
    "valid_from" => "eyJpdiI6IkJ2TUpZV29ZV0Qzasdasdaasgst5345wtgrtyegq4yhq4qhgqgMDU1"
    "question" => "Question B"
    "answer" => "Answer B"
]

我尝试Rule::unique('faqs_questions','question')->ignore($this->question),在我的请求文件上使用,但我认为它需要我们在任何输入中都没有的 id。有什么办法可以解决吗?

标签: laravellaravel-8laravel-validation

解决方案


您可以执行以下操作,其中使用where子句表示我们要检查question表中是否已存在。

$validator = Validator::make(['question' => $request->question], [
    'question' => [ 
        'required', 
        'string',
        Rule::unique('faq_questions')->where('question', '!=', $request->question),
        'max:30'
    ]
]);

您可以将它检查的字段更改为您想要的任何内容,希望以上内容可以为您提供总体思路。

然后你可以检查验证是成功还是失败:

if ($validator->fails()) {
   // error
}

推荐阅读