【发布时间】:2018-11-23 15:28:48
【问题描述】:
我有一个名为 JuridicoFormRequest 的表单请求,其方法是“规则”:
public function rules() {
$rules = [
'rif'=>'required|max:40|unique:juridico,rif',
'correo'=>'required|max:40|unique:juridico,correo',
'd_social'=>'required|max:50',
'r_social'=>'required|max:50',
'pagina_web'=>'max:40|unique:juridico,pagina_web',
'capital'=>'required|numeric',
'fk_lugar'=>'required|integer',
'fk_lugar_fiscal'=>'required|integer',
'fk_tienda'=>'integer',
'num_carnet'=>'max:50'
];
if ($this->juridico){
$rules['rif'] = 'required|max:40';
$rules['correo'] = 'required|max:40';
$rules['pagina_web'] = 'required|max:40';
}
return $rules;
}
问题是在数据库中,“Correo”属性必须是唯一的,对于“pagina_web”也是如此。当我尝试更新某个注册表“A”并编写另一个注册表“B”的相同“Correo”或另一个注册表的相同“pagina_web”时,会引发错误。 “rif”不会发生这种情况,因为它是主键,我已经使用以下方法对其进行了验证:
if ($this->juridico) { /*....*/ }
如果我这样做:
if ($this->juridico) {
$rules['rif'] = 'required|max:40';
$rules['correo'] = 'required|max:40|unique:juridico,correo';
$rules['pagina_web'] = 'required|max:40|unique:juridico,pagina_web';
}
向我抛出验证消息(不是例外)“correo 必须是唯一的”,而该“correo”和“pagina_web”已被我正在更新的注册表占用。
有没有办法解决这个问题?
更新:我是这样解决的:
public function rules(){
$rules = [
'rif'=>'required|max:40|unique:juridico,rif',
'correo'=>'required|max:40|unique:juridico,correo',
'd_social'=>'required|max:50',
'r_social'=>'required|max:50',
'pagina_web'=>'max:40|unique:juridico,pagina_web',
'capital'=>'required|numeric',
'fk_lugar'=>'required|integer',
'fk_lugar_fiscal'=>'required|integer',
'fk_tienda'=>'integer',
'num_carnet'=>'max:50'
];
if ($this->juridico){
$rules['rif'] = 'required|max:40';
$rules['correo'] = 'required|max:40|unique:juridico,correo,'.$this->juridico.',rif';
$rules['pagina_web'] = 'required|max:40|unique:juridico,pagina_web,'.$this->juridico.',rif';
}
return $rules;
}
【问题讨论】:
-
$rules['correo'] = 'required|max:40|unique:correos',
-
我不工作,因为如果我在更新时不更改“correo”或“pagina_web”,将向我抛出验证消息“correo must be unique”或“pagina_web” must be unique
-
查看我的帖子回答
-
您使用的规则强制您在字段中编写与数据库中已有内容不同的内容。因此,如果您输入数据库中已有的数据,您将收到验证错误。这就是它的作用,这是你想要的还是?这个应用程序的实际用途是什么?
-
是的,但是,我正在更新的注册表已经是那个 "correo" 和那个 "pagina_web" 的所有者,为什么每次我想更新它都应该不同?
标签: php laravel laravel-5.6