【问题标题】:Laravel 5.3 Validation uniqueLaravel 5.3 验证唯一
【发布时间】: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 作为第二个参数

标签: php laravel validation laravel-5.3 laravel-validation


【解决方案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!'
        ]
    );
    

    【讨论】:

    • 是的,这似乎是正确的答案,正如上面评论中所指出的那样。谢谢你:)
    猜你喜欢
    • 2018-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-27
    • 2018-01-30
    • 2019-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多