我目前正在努力验证Laravel,尤其是使用 unique
验证器 .
我有一个表,其中包含一些值,现在重要的是 templateUrl
. 我所做的是,向用户显示一个表单,其中包含之前输入的 templateUrl
(保存之后)和其他一些值,然后他可以更改它或保持原样 . 此 templateUrl
在此表中应该是唯一的 . 因此,如果用户在表单中更改了此 templateUrl
,并且尚未使用,则一切正常,但如果用户现在尝试保存它而不更改 templateUrl
,则验证会抛出错误(因为这已经保存在表中,即使它是同一行...) . 因此,即使它的行和列相同,似乎也无法保存该值 . 我希望您知道我的意思吗?
这是验证的代码:
$this->validate($request,
[
'templateUrl' => 'required|unique:users'
],
[
'templateUrl.unique' => 'Diese URL ist leider schon vergeben. Bitte suchen Sie sich eine andere aus!'
]
);
我能做些什么,以便能够保存值,如果它是同一个用户,那么"enters"或者让值保持原样?当然,没有其他用户应该能够输入相同的 templateUrl
,这就是我需要这样的验证的原因,但是如果用户让 templateUrl
保持不变并且只是更改表单中的其他字段,当然它应该可以工作 .
任何想法,技巧?
2 回答
您可以向验证添加额外参数以忽略给定行,在本例中为当前行 . 有关这方面的更多信息,请参见the documentation .
例如:
所以你可以做下面的事情 . 检查是否仅对其他用户是唯一的,并且仅在找到用户时才检查 . 这样您就可以在update和store方法中使用此方法 . 无论如何 - 更好地将此代码移动到Form Request .