Laravel 5.3 验证唯一
Posted
技术标签:
【中文标题】Laravel 5.3 验证唯一【英文标题】:Laravel 5.3 Validation unique 【发布时间】:2017-10-11 15:08:29 【问题描述】:我目前正在努力验证 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
不变并且只是更改表单中的其他字段,它当然应该工作。
有什么想法、技巧吗?
【问题讨论】:
类似这样的东西 - laracasts.com/discuss/channels/requests/… ?? @SirjanSharma 是的,看起来正确,但我没有得到我需要使用的值...我现在尝试了这个:` 'templateUrl' => 'required|unique:users,id, '.$user->id, but it doesn't validate, so 2 users can have the same
templateUrl`,我需要使用哪些参数?
@SirjanSharma 知道了,需要使用 templateUrl 作为第二个参数
【参考方案1】:
因此,您可以制作如下所示的内容。检查是否仅对其他用户唯一,并且仅在找到用户时才唯一。这样您就可以在 update 和 store 方法中使用此方法。无论如何-最好将此代码移至Form Request。
$this->validate($request, [
'templateUrl' => 'required|unique:users,templateUrl' . ($user === null ? '' : ',' . $user->id),
], [
'templateUrl.unique' => 'Diese URL ist leider schon vergeben. Bitte suchen Sie sich eine andere aus!',
]
);
【讨论】:
【参考方案2】:您可以向验证添加额外参数以忽略给定行,在本例中为当前行。有关这方面的更多信息,请访问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!'
]
);
【讨论】:
是的,这似乎是正确的答案,正如上面评论中所指出的那样。谢谢你:)以上是关于Laravel 5.3 验证唯一的主要内容,如果未能解决你的问题,请参考以下文章