如何更新 laravel 请求验证时的唯一字段
How to update on laravel request a unique field on validation
我正在尝试编辑一个表单,其中我有一个 post 和一个标题,body 和 slug,slug 是独一无二的,所以如果我编辑但不更新它,它说它已经被占用了
我正在对 Post请求验证进行尝试:
public function rules()
{
return [
'title' => 'required',
'body' => 'required',
'metaTitle' => 'required',
'metaDescription' => 'required',
'slug' => ['required', Rule::unique('posts')->ignore($this->post)],
];
}
Post控制器上的功能是:
public function store(PostStoreRequest $request)
{
$validated = $request->validated();
auth()->user()->posts()->create($validated);
return redirect()->route('articulos.index');
}
也在我的 blade 更新表单上我有 @method('PUT')
尝试这个希望它会工作
public function rules(Request $request)
{
return [
'title' => 'required',
'body' => 'required',
'metaTitle' => 'required',
'metaDescription' => 'required',
'slug' => 'required|slug|unique:posts,slug,' . $this->post,
];
}
这是我找到的唯一解决方案,使用我自己的验证器 PostRequest 不起作用,因此对于更新,我在更新函数中进行验证:
public function update(Request $request, $id) {
$request->validate([
'slug' => 'required|unique:posts,slug,' . $id,
'title' => 'required',
]);
$post = Post::find($id);
$post->fill($request->all());
$post->save();
return redirect()->route('articulos.index');
}
知道为什么会发生这种情况以及如何解决它会很酷,但这目前有效
请为 Store
和 Update
方法尝试此方法:
'slug' => [
'required',
'slug',
'unique:posts,slug' . (isset($this->post) ? ',' . $this->post : ' ')
],
你应该试试这个:
public function rules()
{
$slug = $this->request->get("slug");
return [
'title' => 'required',
'body' => 'required',
'metaTitle' => 'required',
'metaDescription' => 'required',
'slug' => ['required', Rule::unique('posts')->ignore($slug,'slug')],
];
}
我正在尝试编辑一个表单,其中我有一个 post 和一个标题,body 和 slug,slug 是独一无二的,所以如果我编辑但不更新它,它说它已经被占用了
我正在对 Post请求验证进行尝试:
public function rules()
{
return [
'title' => 'required',
'body' => 'required',
'metaTitle' => 'required',
'metaDescription' => 'required',
'slug' => ['required', Rule::unique('posts')->ignore($this->post)],
];
}
Post控制器上的功能是:
public function store(PostStoreRequest $request)
{
$validated = $request->validated();
auth()->user()->posts()->create($validated);
return redirect()->route('articulos.index');
}
也在我的 blade 更新表单上我有 @method('PUT')
尝试这个希望它会工作
public function rules(Request $request)
{
return [
'title' => 'required',
'body' => 'required',
'metaTitle' => 'required',
'metaDescription' => 'required',
'slug' => 'required|slug|unique:posts,slug,' . $this->post,
];
}
这是我找到的唯一解决方案,使用我自己的验证器 PostRequest 不起作用,因此对于更新,我在更新函数中进行验证:
public function update(Request $request, $id) {
$request->validate([
'slug' => 'required|unique:posts,slug,' . $id,
'title' => 'required',
]);
$post = Post::find($id);
$post->fill($request->all());
$post->save();
return redirect()->route('articulos.index');
}
知道为什么会发生这种情况以及如何解决它会很酷,但这目前有效
请为 Store
和 Update
方法尝试此方法:
'slug' => [
'required',
'slug',
'unique:posts,slug' . (isset($this->post) ? ',' . $this->post : ' ')
],
你应该试试这个:
public function rules()
{
$slug = $this->request->get("slug");
return [
'title' => 'required',
'body' => 'required',
'metaTitle' => 'required',
'metaDescription' => 'required',
'slug' => ['required', Rule::unique('posts')->ignore($slug,'slug')],
];
}