当我尝试更新唯一字段时出现拉拉维尔错误



当我只是更改标题字段时,内容字段将是一个错误,因为它只接受唯一值,如果我不使用唯一验证,那么可能会有具有相同标题的论文,我不想要它。

我在控制器中的方法:

public function update(Paper $paper)
{
// validation
$data = request()->validate([
'title' => ['required', 'unique:papers'],
'content' => ['required']
]);
$data['slug'] = Str::slug(request('title'));
$paper->update($data);
return redirect()->route('papers.show', $paper);
}

感谢您的帮助。

欢迎来到 StackOverflow!

发生这种情况,因为Laravel不知道您要更新的确切项目。它只是检查给定的标题是否已存在于数据库中。 当您在不更改实体标题的情况下更新实体时,就是这种情况。基本上,它正在做你要求它做的事情。

为了防止这种情况,Laravel支持从规则中排除给定id的选项。不要使用unique:title,请尝试在规则集中使用以下方法进行更新。请务必导入规则类:

'title' => [
// ...
Rule::unique('papers')->ignore($paper->id),
];

您可以在官方文档中找到有关此过程的更多详细信息:

  • https://laravel.com/docs/master/validation#rule-unique

相关内容

最新更新