Php (laravel)如何在更新时使用唯一验证请求

Php (laravel)如何在更新时使用唯一验证请求,php,laravel,validation,Php,Laravel,Validation,我想在Lavavel 8中使用唯一验证,但问题是当我不更改名称字段时,它不允许更新 myTemplateController上的我的更新代码 public function updateTemplate($templateId, TemplateRequest $templateRequest) { $thumbnailUrl = $this->templateService->updateThumbnail($templateRequest);

我想在Lavavel 8中使用唯一验证,但问题是当我不更改
名称
字段时,它不允许更新

my
TemplateController上的我的更新代码

    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
at
TemplateRepository

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),那么存储名称值的字段是什么?