使用以下代码在Laravel 6中创建和更新记录,如何添加组合了'iso‘和'division’列的唯一验证,对于update和create都必须唯一?另外,如何自动更新'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];
}发布于 2021-04-11 22:09:40
所有的验证规则都适用于每个字段,我认为你可以做一个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]
);根据您的代码修改上面的示例。
https://stackoverflow.com/questions/67045801
复制相似问题