尝试进行唯一字段验证时出现Laravel获取sql错误

尝试进行唯一字段验证时出现Laravel获取sql错误,laravel,laravel-7.x,Laravel,Laravel 7.x,这是我用于标记表单验证的验证 public function rules() { return [ 'name' => 'required|max:50|min:3|unique:tags,name,'.$this->tag, ]; } 我的控制器代码 public function update(TagValidation $request, Tag $tag ) { $tag->update($request->all(

这是我用于标记表单验证的验证

public function rules()
{
     return [
         'name' => 'required|max:50|min:3|unique:tags,name,'.$this->tag,
     ];
}
我的控制器代码

public function update(TagValidation $request, Tag $tag )
{
    $tag->update($request->all());
}
我试图在尝试更新时避免唯一的字段验证问题。使用后

unique:tags,name,'.$this->tag
我发现下面的sql错误

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'name:"abc"' in 'where clause' (SQL: select count(*) as aggregate from `tags` where `name` = abc and `name:"abc"` <> {"id":14 and `created_at:"2020-06-13T16:24:36`.`000000Z"` = updated_at:"2020-06-13T16:46:44.000000Z"}) 
SQLSTATE[42S22]:未找到列:1054 where子句中的未知列'name:'abc'(SQL:select count(*)作为'tags`where`name`=abc和'name:'abc`{“id”:14和'created_at:'2020-06-13T16:24:36`.`000000Z`=更新地址:2020-06-13T16:46:44.000000Z`)

但我在数据库中有name列,如果我在验证中不使用$this->标记,则存储可以正常工作。

请小心,因为唯一验证是无效的

唯一:表,列,除了,idColumn

您正在传递tag的值anme,但这不是必需的

您实际使用:

return [
   'name' => 'required|max:50|min:3|unique:tags,name,'.$this->tag,
];
但您需要使用这个我向您展示的工作示例,以便在存储和更新上使用相同的验证(POST和PUT方法):

包含在Laravel 7*上,您可以直接使用模型

public function rules()
{
    // Check Create or Update
    if ($this->method() == 'PUT') 
    {
        return [
            'name' => 'required|unique:App\Tag,name,'.$this->id.',id'
        ];
    }elseif ($this->method() == 'POST'){
        return [
            'name' => 'required|unique:App\Tag,name'
        ];
    }
}

请小心,因为唯一验证是必需的

唯一:表,列,除了,idColumn

您正在传递tag的值anme,但这不是必需的

您实际使用:

return [
   'name' => 'required|max:50|min:3|unique:tags,name,'.$this->tag,
];
但您需要使用这个我向您展示的工作示例,以便在存储和更新上使用相同的验证(POST和PUT方法):

包含在Laravel 7*上,您可以直接使用模型

public function rules()
{
    // Check Create or Update
    if ($this->method() == 'PUT') 
    {
        return [
            'name' => 'required|unique:App\Tag,name,'.$this->id.',id'
        ];
    }elseif ($this->method() == 'POST'){
        return [
            'name' => 'required|unique:App\Tag,name'
        ];
    }
}

您应该传递要忽略的记录的id,我假定唯一规则是标记:

 'name' => 'required|max:50|min:3|unique:tags,name,'. $this->tag->id,
或者,您可以使用规则的对象版本,只需将模型直接传递给:

'name' => [
    'required', 'max:50', 'min:3', 
    Rule::unique('tags')->ignore($this->tag),
],

您应该传递要忽略的记录的id,我假定唯一规则是标记:

 'name' => 'required|max:50|min:3|unique:tags,name,'. $this->tag->id,
或者,您可以使用规则的对象版本,只需将模型直接传递给:

'name' => [
    'required', 'max:50', 'min:3', 
    Rule::unique('tags')->ignore($this->tag),
],

我假设您希望在使用
$this->tag
时将某个字段的值传递给规则(可能是模型的id),而不是模型实例本身?如果我使用$this->id,我得到的是“名称已被取下”。
$this->tag
是一个模型实例。。。您正在将一个模型实例连接到正在构建的字符串(该字符串序列化模型),而不是在那里传递一个像id一样的值<代码>$this->tag->id将是tag的id在使用$this->tag->id之后,我得到了验证错误“名称已被采用”。在看到这个ans后,我使用了模型实例。我的路径是tags/14/edit。我假设您想要将某个字段的值传递给规则(可能是模型的id),使用
$this->tag
时不是模型实例本身?如果我使用$this->id,我得到的是“名称已被取下”。
$this->tag
是一个模型实例。。。您正在将一个模型实例连接到正在构建的字符串(该字符串序列化模型),而不是在那里传递一个像id一样的值<代码>$this->tag->id将是标记的id在使用$this->tag->id之后,我收到验证错误“名称已被采用”。在看到这个ans后,我使用了模型实例。我的路线是tags/14/edit我看到了这个ans,它们给出了较小的解决方案,但我只是得到了sql错误。我已经看到这个ans,他们给出了更小的解决方案,但我只是得到了sql错误。