Laravel 验证:带回重复记录的唯一规则

Posted

技术标签:

【中文标题】Laravel 验证:带回重复记录的唯一规则【英文标题】:Laravel validation: unique rule to bring duplicated record back 【发布时间】:2019-05-02 14:04:02 【问题描述】:

我在任何地方都没有找到我正在寻找的干净方法,所以想在这里尝试一下:

$validator = Validator::make($request->all(), [
            'an_id' => 'unique:users,an_id',
            'another_id' => 'unique:users,another_id',
            'test_id' => 'unique:users,test_id',
        ]);

        if ($validator->fails()) 
            //
        

所以,我想做的是,当提供重复的 test_id 时,不仅会失败,还会告诉我哪个用户使用相同的 test_id

这真的可以通过 Laravel 的 Validation 实现吗?

【问题讨论】:

【参考方案1】:

如果我理解正确,这是您想要实现的目标吗?

更新:也许您想在视图中获取重复的用户。

Update2:获取和返回重复用户(如果有)的快速方法。

(注意:我没有测试过代码,所以可能需要稍作调整)

$validator = Validator::make($request->all(), [
    'an_id' => 'unique:users,an_id',
    'another_id' => 'unique:users,another_id', 
    'test_id' => 'unique:users,test_id',
]);

if ($validator->fails()) 

    //find the duplicated user
    $duplicatedUserX = User::where(
       'another_id', $request->input('another_id')
    )->get();

    $duplicatedUserY = User::where(
        'test_id', $request->input('test_id')
    )->get();

    // add their test_id to error messagebag.
    if(!empty($duplicatedUserX)
        $validator->errors()
            ->add('duplicatedUserXId', $duplicatedUserX->id);
    

    if(!empty($duplicatedUserY)
        $validator->errors()
            ->add('duplicatedUserYId', $duplicatedUserY->id);
    

    // Send duplicated users and messagebag back to View
    return redirect()->back()
      ->with('dupUsers', [
        'x' => $duplicatedUserX,
        'y' => $duplicatedUserY,
      ])->withErrors($validator);

【讨论】:

谢谢@hktang!如果another_id 失败了怎么办? @thitami,希望对您有所帮助!我的想法是您可以分配 $dupUserForAnotherID 和 $dupUserForTestID 并将两者都发送到视图。注意,它可以是空值。然后您可以在视图上检索它。我希望有更优雅的方法来做到这一点。

以上是关于Laravel 验证:带回重复记录的唯一规则的主要内容,如果未能解决你的问题,请参考以下文章

具有多个参数的 Laravel 自定义验证规则 [重复]

Laravel:更新和创建时验证唯一

使 Laravel 的 notIn 验证规则不区分大小写

十六进制代码验证在laravel中不起作用[重复]

Laravel 验证唯一规则反射类异常

Laravel 唯一的验证规则,除了不工作