【发布时间】:2020-06-02 00:22:36
【问题描述】:
我有一个名为Sides 的表,其中包含id、name、side_category_id 和其他一些目前不重要的字段。
我想验证在创建新的side 记录时,该记录不存在。所以,假设我在数据库中有一条记录,例如:
id: 1
name: Salad
side_category_id: 3
如果我尝试使用name = 'salad' 和side_category_id = 3 插入新记录,则创建必须失败并返回错误。
我通过使用以下规则实现了这一点:
$rules = [
'name' => 'required',
'side_category_id' => 'required|exists:side_categories,id|unique:sides,side_category_id,NULL,id,name,' . $this->request->get('name')
]
到目前为止一切顺利。它按预期工作。但是现在如果我想编辑一条记录并保存它而不做任何修改,它会返回一个错误,这不是我想要的结果。
如果我尝试在不进行任何修改的情况下更新记录,它应该会成功。如何更新我的规则以实现这一目标?
【问题讨论】:
-
您必须在逗号后将要忽略的记录的 id 传递给唯一规则
'side_category_id' => '....|unique:sides,side_category_id,' . $this->request->get('id') -
@porloscerrosΨ 我刚试过但没有用。仍然收到同样的错误提示:侧面类别 id 已被占用。
-
您是在请求中接收记录 id 还是作为路由参数?如果它是一个路由参数,并且您将其作为函数 arg 获取,例如
public function update(Request $request, $id),您应该使用$id变量。'...|unique:sides,side_category_id,' . $id或者如果您使用像public function update(Request $request, Model $model)这样的模型绑定,您应该使用'....|unique:sides,side_category_id,' . $model->id -
是的,我收到了 id 作为路由参数。我已将我的规则更新为
...|unique:sides,side_category_id,' . $this->route('id'),但同样的错误不断出现。 (没有直接使用$id,因为它说它没有定义)
标签: php laravel eloquent laravel-validation laravel-formrequest