我一直在努力想出这个问题,并且已经完成了从这里和Laracast的每一篇文章,但是仍然可以解决这个问题。
我之前做过这个并且它有效,但我不太清楚它为什么现在没有。
基本上在表单请求中设置规则应遵循以下格式:
<?php
class MyFormRequest extends Request{
public function rules(){
return [
'field' => 'required|unique:table_name:field,' . $this->input('field');
];
}
}
这对我来说应该有效,但根据我目前的经验并不适用。我试图通过检查传入请求方法来分离规则,并根据请求是更新还是创建来分配规则。
我不满足于这个要求吗?什么是重新使用我的FormRequest的最好方法,但确保我能够验证我想要的任意数量的表字段的唯一性,无论他们的数据类型如何,因为我感觉这可能与Laravel似乎有关要对正在验证的字段进行聚合,如果它不是整数,例如它将继续显示错误消息。
解决这个问题的另一种可能方法是,如果我为有兴趣验证的字段实现自己的验证方法。我该怎么做呢?
答案 0 :(得分:0)
此规则仅在“table_name”的主键为“id”时有效,但如果它不同,则必须将其作为唯一规则的第四个参数写入,如下所示:
<?php
class MyFormRequest extends Request{
public function rules(){
return [
'field' => 'required|unique:table_name:field,' . $this->input('field').','.'primary_key_field';
];
}
}
希望它可以帮到你!!!
答案 1 :(得分:0)
您需要告知验证器要从重复搜索中排除哪些行。
如果您的主键是Util
,则需要传递其值:
id
您的代码还有其他一些错误:
'field' => 'required|unique:table_name,field,' . $this->input('id')
答案 2 :(得分:0)
规则&#34;唯一&#34;更新时需要aditional参数。这些附加论点将负责忽略您正在处理的实际注册表。如果未应用,则此规则将始终无效,因为始终将在数据库中找到注册表。
您的第三个参数应该是您要忽略的ID。 (你传递了一个值......)
*另一件事:我从你的规则中选择了一个错误的类型。用新的参数检查右下方的sintax。
'field' => 'required|unique:table_name,field,'.$this->input('id')'
PS:如果您的表中的id列与&#34; id&#34;的名称不同,则需要将此列名指定为第四个参数。
'field' => 'required|unique:table_name,field,'.$this->input('id').',column_name'