@driverx18

Как решить проблему с валидатором unique при обновлении поста?

У меня есть реквест, у которого в правилах прописано:
public function rules()
    {
        return [
            'title' => 'unique:posts,title|min:10|max:200|required',
            'description' => 'required|min:20',
            'image' => 'image|max:1024',
        ];
    }

При создании поста конечно проблем нет, а когда я передаю этот же реквест в экшн обновления поста (и меняю допустим только описание поста, или меняю картинку не трогая title), то мне Laravel отвечает
The title has already been taken.
. И как бы не поспоришь, потому что действительно такой title есть в базе данных, но только у этого поста. Как Ларавелу дать понять, что валидатор unique должен реагировать на все записи, кроме нынешней? Вот экшн
public function update(RequestCreatePost $request, $id) {
        $post = Post::findOrFail($id);
        if($request->hasFile('image')) {
        $image = new Image;
        $image->image = $request->file('image');
        $post->photo = $image->save('blog');
        }
        $post->user_id = Auth::id();
        if($post->fill($request->except('image')) && $post->save()) {
            return redirect()->back();
        }
    }
  • Вопрос задан
  • 201 просмотр
Решения вопроса 1
amelihovv
@amelihovv
Фулстек веб разработчик
$post = route('post'); // либо любым другим способом получите редактируемый пост
return [
 'title' => [
  // остальные правила
  Rule::unique('posts', 'title')->ignore($post->id),
 ],
];
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы