如何更新 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');
    }

知道为什么会发生这种情况以及如何解决它会很酷,但这目前有效

请为 StoreUpdate 方法尝试此方法:

'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')],
        ];
  }