Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 尝试更新相同记录而不进行任何更改时,Laravel验证规则失败_Php_Laravel_Eloquent_Laravel Validation_Laravel Formrequest - Fatal编程技术网

Php 尝试更新相同记录而不进行任何更改时,Laravel验证规则失败

Php 尝试更新相同记录而不进行任何更改时,Laravel验证规则失败,php,laravel,eloquent,laravel-validation,laravel-formrequest,Php,Laravel,Eloquent,Laravel Validation,Laravel Formrequest,我有一个名为Sides的表,它由id、name、Sides\u category\u id和一些目前不重要的字段组成 我想验证一下,当创建一个新的端记录时,该记录并不存在。假设我在数据库中有一条记录,比如: id: 1 name: Salad side_category_id: 3 如果我尝试插入一条名为“sala”的新记录,且该记录的编号为3,则创建必须失败并返回错误 我通过使用以下规则实现了这一点: $rules = [ 'name' => 'requi

我有一个名为
Sides
的表,它由
id
name
Sides\u category\u id
和一些目前不重要的字段组成

我想验证一下,当创建一个新的
记录时,该记录并不存在。假设我在数据库中有一条记录,比如:

id: 1
name: Salad
side_category_id: 3
如果我尝试插入一条名为“sala”的新记录,且该记录的编号为3,则创建必须失败并返回错误

我通过使用以下规则实现了这一点:

$rules = [
   'name'             => 'required',
   'side_category_id' => 'required|exists:side_categories,id|unique:sides,side_category_id,NULL,id,name,' . $this->request->get('name')
]
到目前为止还不错。它按预期的那样工作。但是现在如果我想编辑一条记录并保存它而不做任何修改,它会返回一个错误,这不是我想要的结果


如果我尝试更新记录而不做任何修改,它应该会成功。如何更新规则以实现此目的?

您可以使用规则::unique()

对于创建如下所示

$rules = [
   'name'             => ['required'],
   'side_category_id' => ['required',Rule::unique('sides', 'name')->where(function ($query) use($category_id) {
    return $query->where('side_category_id', $category_id);
}),Rule::exists('side_categories')]
]
对于更新

$rules = [
       'name'             => ['required'],
       'side_category_id' => ['required',Rule::unique('sides', 'name')->where(function ($query) use($category_id) {
        return $query->where('side_category_id', $category_id);
    })->ignore($id),Rule::exists('side_categories')]
    ]
//$id should be you parameter

必须在逗号后将要忽略的记录的id传递给唯一规则
“side_category_id”=>“…..”唯一:side,side_category_id“$这个->请求->获取('id')
@porloscerosψ我刚刚试过,但没有成功。仍然会出现相同的错误,即:已获取侧类别id。您是在请求中接收记录id还是作为路由参数接收记录id?如果它是一个路由参数,您可以将其作为函数arg获得,比如
公共函数更新(Request$Request$id)
您应该使用
$id
变量<代码>'…|唯一:侧面,侧面_类别_id'$id或者如果您使用的是模型绑定,如
公共功能更新(Request$Request,model$model)
您应该使用
“…..”唯一:侧面,侧面(类别)id“$model->id
是,我正在接收id作为路线参数。我已将规则更新为
。|唯一:侧面,侧面_类别_id'$这->路由('id')
,但同样的错误不断出现。(没有直接使用
$id
,因为它说它没有定义)是的,我考虑过这一点,但我不太高兴有两个单独的
FormRequest
,如果可能的话,我宁愿有一个,因为基本上是相同的操作(商店)正在执行您可以使用第二条规则创建和更新更新更新时,您必须将对象id作为请求参数传递更改
->ignore($id)
->ignore($this->id)