Laravel验证:独特的规则可将重复的记录带回

时间:2018-11-30 11:59:54

标签: mysql laravel validation laravel-5

我在任何地方都没有找到我想要的东西的干净方法,因此可以尝试以下方法:

$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的验证这真的可能吗?

1 个答案:

答案 0 :(得分:0)

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

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

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);
}