Php (laravel)如何在更新时使用唯一验证请求
我想在Lavavel 8中使用唯一验证,但问题是当我不更改Php (laravel)如何在更新时使用唯一验证请求,php,laravel,validation,Php,Laravel,Validation,我想在Lavavel 8中使用唯一验证,但问题是当我不更改名称字段时,它不允许更新 myTemplateController上的我的更新代码 public function updateTemplate($templateId, TemplateRequest $templateRequest) { $thumbnailUrl = $this->templateService->updateThumbnail($templateRequest);
名称
字段时,它不允许更新
myTemplateController上的我的更新代码
public function updateTemplate($templateId, TemplateRequest $templateRequest)
{
$thumbnailUrl = $this->templateService->updateThumbnail($templateRequest);
$this->templateRepository->updateTemplateInfo($templateRequest, $templateId, $thumbnailUrl);
return redirect()->route('templates.list.show', [$templateId])
->with(["message" => __('templates.edit.success')]);
}
这是我的UpdateTemplateInfo
atTemplateRepository
public function updateTemplateInfo($request, $templateId, $thumbnail)
{
$template = $this->getTemplate($templateId);
$template->name = $request->name;
$template->thumbnail = $thumbnail;
$template->business_type_id = $request->business_type;
$template->update();
}
这是我的TemplateRequest
public function rules()
{
return [
'name' => 'required|unique:templates',
'business_type' => 'required'
];
}
这是web.php
Route::patch('/list/{templateId}/update', 'TemplateController@updateTemplate')->name('templates.list.update');
当我尝试在不更改名称字段的情况下更新时,验证程序失败您应该为更新案例创建一个新的请求类
公共功能规则()
{
返回[
'name'=>“必需|唯一:模板,名称,{$this->name}”,
“业务类型”=>“必需”
];
}
或者,您可以将当前请求类编辑为:
公共功能规则()
{
$rules=[
“业务类型”=>“必需”
];
if(request()->method==“PUT”){
$rules['name']=“必需|唯一:模板,名称,{$this->name}”;
}否则{
$rules['name']='required | unique:templates';
}
返回$rules;
}
如果你不想创建一个单独的post和put请求,你可以这样做
public function rules() {
$rules = [
'name' => 'required|unique:templates,name',
'business_type' => 'required'
];
if ($this->method() === 'PUT') {
$rules['name'] .= ',' . $this->route('templateId');
}
return $rules;
}
我得到这个错误,可能是因为ID SQLSTATE[42S22]:未找到列:1054 where子句中的未知列“13”(SQL:选择count(*)作为来自模板的聚合,其中13
=测试模板)我忘记了字段名。尝试更新的代码。现在我得到这个错误。SQLSTATE[42S22]:未找到列:1054“where子句”中的未知列“name”(SQL:选择count(*)作为来自templates
where`name`=测试模板和id
13)templateId值是表中的id(例如13),那么存储名称值的字段是什么?