当我只是更改标题字段时,内容字段将是一个错误,因为它只接受唯一值,如果我不使用唯一验证,那么可能会有具有相同标题的论文,我不想要它。
我在控制器中的方法:
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