【问题标题】:Laravel 6 validate multiple columnsLaravel 6 验证多列
【发布时间】:2021-04-11 22:16:14
【问题描述】:

在 Laravel 6 中使用以下代码创建和更新记录,如何添加一个唯一的验证,它结合了 'iso' 和 'division' 列必须是唯一的,用于更新和创建?另外如何在不“触摸”的情况下自动更新“updated_at”列?

 public function upsert(Request $request)
    {
        $this->authorize('manage','App\Admin\Division');
        $this->validate($request,[
                'records.iso' => 'required|regex:/^[A-Z]{2}$/',
                'records.division' => 'required|min:2|max:3',
                'records.remarks' => 'min:2|max:255|string|nullable',
        ],
           [ 'records.iso.required'=>'Country iso Requied',
             'records.iso.regex'=>'Country iso format : AA',
             'records.division.required'=>'Division Code must entered',
             'records.division.min'=>'Division Code minimum 2 characters',
             'records.division.max'=>'Division Code maximum 3 characters',
            ],
        );
        $validatedData = $request->records;
        if($validatedData['id']){   // have id, old record -> update       
            Division::where('id', $validatedData['id'])->update($validatedData);
            //*******/ To correct updated_at no auto updated
            $results = Division::find($validatedData['id']);
            $results->touch();
            //****** */ End of correction
        }else{ // no id -> create record
            $validatedData['auth'] = Auth::id();
            $results = Division::create($validatedData);
        }
        return  ['divisions' => $results];
    }

【问题讨论】:

    标签: laravel


    【解决方案1】:

    所有验证规则都适用于每个字段,我认为您可以使用foreach 来解决和压缩代码,例如:

    foreach ($records  as $key => $record) {
      $fields['record'.$key] = 'iso', 'division';
      $rules['record'.$key] = 'required|min:2';
    }
      $validator = Validator::make($fields, $rules);
    

    在规则数组中你可以放所有的共享规则,但是你必须在这之后创建其他复杂的验证规则,所以我认为你现在的验证很好。

    对于updated_at 字段,使用updateOrCreate

    $results = Division::updateOrCreate(
       ['id', $validatedData['id'],
       [$validatedData]
    );
    

    根据您的代码调整上述示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-05
      • 2014-08-08
      • 2018-10-25
      • 1970-01-01
      • 2020-06-10
      • 2021-04-28
      • 1970-01-01
      相关资源
      最近更新 更多