【问题标题】:Laravel validation: unique rule to bring duplicated record backLaravel 验证:带回重复记录的唯一规则
【发布时间】: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 实现吗?

【问题讨论】:

    标签: mysql laravel validation laravel-5


    【解决方案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 并将两者都发送到视图。注意,它可以是空值。然后您可以在视图上检索它。我希望有更优雅的方法来做到这一点。
    猜你喜欢
    • 1970-01-01
    • 2015-02-27
    • 2018-05-24
    • 1970-01-01
    • 2016-04-08
    • 2019-11-15
    • 2016-08-03
    • 2020-09-13
    • 1970-01-01
    相关资源
    最近更新 更多