我目前正在努力验证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!'
]
);
我可以做些什么,以便能够保存值,如果它是同一个用户,那么"进入"或者让价值保持原样?
当然,没有其他用户应该能够输入相同的templateUrl
,这就是为什么我需要这样的验证,但是如果用户让templateUrl
保持不变并且只是更改表单中的其他字段当然它应该有用。
任何想法,技巧?
答案 0 :(得分:1)
您可以向验证添加额外参数以忽略给定行,在本例中为当前行。有关这方面的更多信息,请参阅the documentation。
例如:
$this->validate($request,
[
'templateUrl' => 'required|unique:users,templateUrl,' . $user->id // Ignore rows with primary key $user->id
],
[
'templateUrl.unique' => 'Diese URL ist leider schon vergeben. Bitte suchen Sie sich eine andere aus!'
]
);