Laravel 唯一验证,仅当值不同且没有 id 时
Laravel unique validation, only if value is different & without id
我正在尝试更新数据,为此我在我的表单上使用了一个方法补丁。
更新验证请求
use Illuminate\Validation\Rule;
'question' => [
'required',
'string',
Rule::unique('faqs_questions','question'),
'max:30',
],
如果我的问题没有变化,它会给我一个错误:
The question has already been taken.
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。有什么办法可以解决吗?
将其放入隐藏输入怎么样?
如果您通过 question
发送的内容是独一无二的,您也可以使用类似这样的方式:Rule::unique('users')->ignore($this->question, 'slug')
您可以执行以下操作,其中使用 where
子句表示我们要检查 question
是否已经在 table.
中
$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']);
}
如果我理解你的问题
我正在尝试更新数据,为此我在我的表单上使用了一个方法补丁。
更新验证请求
use Illuminate\Validation\Rule;
'question' => [
'required',
'string',
Rule::unique('faqs_questions','question'),
'max:30',
],
如果我的问题没有变化,它会给我一个错误:
The question has already been taken.
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。有什么办法可以解决吗?
将其放入隐藏输入怎么样?
如果您通过 question
发送的内容是独一无二的,您也可以使用类似这样的方式:Rule::unique('users')->ignore($this->question, 'slug')
您可以执行以下操作,其中使用 where
子句表示我们要检查 question
是否已经在 table.
$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']);
}
如果我理解你的问题