Laravel 唯一的验证规则,除了不工作
Posted
技术标签:
【中文标题】Laravel 唯一的验证规则,除了不工作【英文标题】:Laravel unique validation rule with except not working 【发布时间】:2020-02-23 22:23:18 【问题描述】:Laravel 唯一验证规则,除了列无法更新,我的代码有什么问题?
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
感谢您的帮助
【问题讨论】:
【参考方案1】:您可以传递文章的整个实例以进行验证,如下所示:
Rule::unique('articles')->ignore($article);
因为你已经在说要检查哪一列了。
https://laravel.com/docs/6.x/validation
【讨论】:
【参考方案2】:删除标题
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',
]));
...
希望对你有帮助
更多信息,请查看rule-unique
【讨论】:
似乎我在数据库中有重复的标题。我不知道为什么,但我删除了数据库中的所有重复项,现在它可以工作了。 Rule::unique('articles')->ignore($article->id) 和 Rule::unique('articles')->ignore($article) 和 Rule::unique('articles', 'title') ->ignore($article->id) 现在都在工作。【参考方案3】:如果您在$request->user()->articles()
上运行更新,您将更新所有用户的文章。如果用户只有 1 篇文章,那么它应该可以正常工作,但是如果有更多则这将导致数据被覆盖。
改为:
$article->update($request->validate([
'title' => [
'required',
Rule::unique('articles', 'title')->ignore($article->id)
],
'content'=>'required|min:90',
]));
【讨论】:
以上是关于Laravel 唯一的验证规则,除了不工作的主要内容,如果未能解决你的问题,请参考以下文章
如何使唯一数组的自定义验证规则依赖于其他字段 laravel