В My Blog Controller у меня есть addBlog и updateBlog, которые пытаются проверить их с помощью функции проверки. При добавлении блога он работает, как указано, но при обновлении блога он снова и снова говорит, что заголовок уже существует, так как я выбрал заголовок как uniue. Итак, как я могу сделать эту работу для редактирования.
Я использую laravel 5.2
protected function validator(array $data)
{
return Validator::make($data, [
'title' => 'required|max:255|unique:blogs',
'meta_tags' => 'required|max:200',
'content' => 'required|min:6',
]);
}
public function updateBlog(Request $request, $id)
{
$this->middleware('auth');
$user = Auth::user();
$validator = $this->validator($request->all());
if ($validator->fails()) {
$this->throwValidationException(
$request, $validator
);
}
try{
$blog_Request = Blog::findOrFail($id);
$blog_Request->title = $request->get('title');;
$blog_Request->meta_tags = $request->get('meta_tags');
$blog_Request->content = $request->get('content');
$blog_Request->status = $request->get('status');
if ($blog_Request->save()) {
$request->session()->flash('message', 'Blog saved successfully!');
$request->session()->flash('alert-class', 'alert-success');
} else {
$request->session()->flash('message', 'Some error occoured!');
$request->session()->flash('alert-class', 'alert-danger');
}
return redirect()->route('blog.edit_blog', $id);
} catch (QueryException $ex) {
print_r("Error on line number " . $ex->getLine() . " in file " . $ex->getFile() ."</br>");
}
}
public function addBlog(Request $request)
{
$this->middleware('auth');
$user = Auth::user();
$validator = $this->validator($request->all());
if ($validator->fails()) {
$this->throwValidationException(
$request, $validator
);
}
$blog_Requests = new Blog;
$blog_Requests->title = $request->get('title');;
$blog_Requests->meta_tags = $request->get('meta_tags');
$blog_Requests->content = $request->get('content');
$blog_Requests->user_id = $user->id;
try{
if ($blog_Requests->save()) {
$request->session()->flash('message', 'Blog saved successfully!');
$request->session()->flash('alert-class', 'alert-success');
} else {
$request->session()->flash('message', 'Some error occoured!');
$request->session()->flash('alert-class', 'alert-danger');
}
return redirect()->route('blogs');
} catch (QueryException $ex) {
print_r("Error on line number " . $ex->getLine() . " in file " . $ex->getFile() ."</br>");
}
}



Я думаю, что решение заключается в добавлении $blog->id в качестве второго параметра в ваш валидатор, потому что вы хотите выдать ошибку валидации только в том случае, если пользователь предоставляет заголовок, который уже используется в блоге разные.
:
return Validator::make($data, [
'title' => 'required|max:255|unique:blogs,' . $blog->id,
'meta_tags' => 'required|max:200',
'content' => 'required|min:6',
]);
Надеюсь на эту помощь!