Laravel唯一的验证规则带有,但不起作用



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

最新更新