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 验证唯一的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.3 用户验证源码探究 路由与注册

护照身份验证在 laravel 5.3 中不起作用

Laravel 5.3 自定义验证消息数组

Laravel 5.3 和 VueJS 2 身份验证

Laravel 身份验证在 laravel 5.3 中无法正常工作

在 Laravel 5.3 中使用多个身份验证?