首页 文章

Laravel 5.3验证独特

提问于
浏览
0

我目前正在努力验证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 回答

  • 0

    您可以向验证添加额外参数以忽略给定行,在本例中为当前行 . 有关这方面的更多信息,请参见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!'
        ]
    );
    
  • 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!',
        ]
    );
    

相关问题