Laravel唯一验证,仅当值不同时&;没有身份证
我正在尝试更新数据,为此我在表单上使用了一个方法补丁 更新验证请求Laravel唯一验证,仅当值不同时&;没有身份证,laravel,laravel-8,laravel-validation,Laravel,Laravel 8,Laravel Validation,我正在尝试更新数据,为此我在表单上使用了一个方法补丁 更新验证请求 use Illuminate\Validation\Rule; 'question' => [ 'required', 'string', Rule::unique('faqs_questions','question'), 'max:30', ], 如果我的问题没有变化,我会出错: 这个问题已经提出了 dd($this->toArray())根据验证请求获得以下输出: array:9
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\u questions','question')->ignore($this->question),
,但我认为它需要我们在任何输入中都没有的id。有办法解决吗?把它放到一个隐藏的输入中怎么样
如果您通过
question
发送的任何内容都是唯一的,您也可以使用类似这样的内容:Rule::unique('users')->ignore($this->question,'slug')
您可以执行以下操作,使用where
子句来表示我们要检查问题
不在表中
$validator = Validator::make(['question' => $request->question], [
'question' => [
'required',
'string',
Rule::unique('faq_questions')->where('question', '!=', $request->question),
'max:30'
]
]);
您可以将它检查的字段更改为您想要的任何字段,希望上面的内容能为您提供大致的想法
然后,您可以检查验证是否成功:
if ($validator->fails()) {
// error
}
这是我在laravel 8中验证的工作示例
public function edit($id, Request $request){
$request->validate([
'email' => 'required|email',Rule::unique('users')->ignore($id, 'id'),
'fname' => 'required',
'sname' => 'required',
'lname' => 'required',
]);
$user = User::find($id);
$input = $request->all();
$results = array_filter($input);
$user->fill($results)->save();
return response()->json(['user' => $user, 'success' => 'Your Info Has been Saved']);
}
如果我能很好地理解你的问题我想我已经在使用slug作为一个独特的参数了。假设我将
'question B'
转换为'question A'
并提交表单,然后$this->question
将选择输入作为'question A'
而不是'question B'
。我们需要确保slug被传递给request(我想是这样的),这样我们就可以调用一个ID使其唯一并忽略该特定ID。有什么线索可以帮助我们完成这项任务吗?如果你更改slug,你就更改了slug,因此它就不能再被用作标识符。如果你打算时不时地换鼻涕虫,我就不赞成那种解决办法。在这种情况下,隐藏的输入更安全。但是,如果您想要执行slug解决方案,请确保将slug
添加到$guarded
中。您可以看到输出中没有可用的slug参数。我们如何才能在其中提取slug?哪个输出?您不显示模型结构。所以这是我最好的猜测。您必须知道您的项目设置可以实现什么。我接受此解决方案,但我们可以在请求中执行相同的操作吗?因为我的验证是在更新验证请求文件中完成的,并且我希望避免在Controlleries中使用验证,您可以在FormRequest
s中使用规则::unique(…)
。