Php 如何在验证时更新laravel请求的唯一字段

Php 如何在验证时更新laravel请求的唯一字段,php,laravel,laravel-5.8,Php,Laravel,Laravel 5.8,我正在尝试编辑一个表单,其中我有一篇带有标题、正文和slug的帖子,slug是唯一的,所以如果我编辑它,不更新它,它会说它已经被拿走了 我正在我的PostRequest验证中尝试: public function rules() { return [ 'title' => 'required', 'body' => 'required', 'metaTitle' => 'require

我正在尝试编辑一个表单,其中我有一篇带有标题、正文和slug的帖子,slug是唯一的,所以如果我编辑它,不更新它,它会说它已经被拿走了

我正在我的PostRequest验证中尝试:

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

另外,在我的刀片更新表单中,我有@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');
    }

知道为什么会发生这种情况以及如何解决它会很酷,但这目前正在起作用

请尝试以下存储和更新方法:

你应该试试这个:


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


现在它说了一个未定义的变量:posts View:C:\wamp64\www\item.github\resources\views\manager\posts\list.blade.php'slug'=>['required','slug',Rule::unique'posts'->ignore$this->post'id',this->post是您的post对象id吗?不,它是整个post,尝试你现在说的我得到了不同的错误方法Illumb\Validation\Validator::validateSlug不存在。似乎$this post是空的,不能将其放在我的PostRequest验证中,因为$this->post为空,我如何获得它?在存储方法中,你不需要并更新你传递id,然后在验证方法中获取对象传递,然后“unique:posts,鼻涕虫'。isset$object->slug?','$对象slug:“”有效,但如果您在创建时尝试添加非唯一的slug,则会抛出错误SQLSTATE[23000]:完整性约束冲突:1062键“posts\u slug\u unique”的重复条目“dasddas”,但更新方法有效-您是正确的-这只适用于Updaint。我认为创建和更新sholud的请求应该分开。在创建-摆脱'->ignore$slug,'slug partI做了两个验证请求,postStore和postpdate,所有工作都很好,谢谢!

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