Laravel唯一验证规则,except列无法更新,我的代码有什么问题?
public function update(Request $request, Article $article)
{
abort_if($article->user_id !== $request->user()->id, 403);
$article = $request->user()->articles()->update($request->validate([
'title' => [
'required',
Rule::unique('articles', 'title')->ignore($article->id)
],
'content'=>'required|min:90',
]));
return redirect('articles/'.$article->id)->withSuccess('Article saved.');
}
错误:标题已被占用。
Laravel版本:6.4.0
感谢的帮助
您可以传递整个项目实例以进行验证,例如:
Rule::unique('articles')->ignore($article);
因为你已经在说要检查哪一列了。
https://laravel.com/docs/6.x/validation
从中删除标题
Rule::unique('articles', 'title')->ignore($article->id)
至
...
$article = $request->user()->articles()->update($request->validate([
'title' => [
'required',
Rule::unique('articles')->ignore($article->id)
],
'content'=>'required|min:90',
]));
...
希望这能帮助
更多信息,检查规则唯一
如果在$request->user()->articles()
上运行更新,您将更新用户的所有文章。如果用户只有一篇文章,那么它应该可以正常工作,但是如果有更多的文章,那么这将导致数据被覆盖。
相反:
$article->update($request->validate([
'title' => [
'required',
Rule::unique('articles', 'title')->ignore($article->id)
],
'content'=>'required|min:90',
]));
如果使用softDelete
并删除了具有相同title
的对象,请不要忘记检查deleted_at
列是否为null
。
$request->validate([
'title' => [
'required',
Rule::unique('articles', 'title')
->ignore($article->id)
->whereNull('deleted_at')
],
'content'=>'required|min:90',
])