У меня есть этот код контроллера в моем Laravel -5.8 проекте:
Правила:
public function rules()
{
return [
'leave_type_name' => [
'required',
'string',
'min:3',
'max:80',
Rule::unique('hr_leave_types')->where(function ($query) {
return $query->where('leave_type_name', $this->leave_type_name)
->where('company_id', $this->company_id);
})
],
'leave_type_code' => [
'nullable',
'string',
// 'min:3',
'max:10',
Rule::unique('hr_leave_types')->where(function ($query) {
return $query->where('leave_type_code', $this->leave_type_code)
->where('company_id', $this->company_id);
})
],
'no_of_days' => 'required|array',
'no_of_days.*' => [
'required',
'numeric',
'max:120'
],
'employment_type_id' => 'required|array',
'employment_type_id.*' => [
'required',
],
];
}
Ошибка связана с этим:
'employment_type_id' => 'required|array',
'employment_type_id.*' => [
'required',
],
Код контроллера: -
public function store(StoreLeaveTypeRequest $request)
{
if (! Gate::allows('leave_type_create')) {
return abort(401);
}
$userCompany = Auth::user()->company_id;
DB::beginTransaction();
try {
$leavetype = new HrLeaveType();
$leavetype->leave_type_name = $request->leave_type_name;
$leavetype->leave_type_code = $request->leave_type_code;
$leavetype->description = $request->description;
$leavetype->company_id = Auth::user()->company_id;
$leavetype->created_by = Auth::user()->id;
$leavetype->created_at = date("Y-m-d H:i:s");
$leavetype->is_active = 1;
$leavetype->save();
foreach ($request->employment_type_id as $key => $employment_type_id){
$insert_array = [
'no_of_days' => $request->no_of_days[$key],
'employment_type_id' => $request->employment_type_id[$key],
'leave_type_id' => $leavetype->id,
'company_id' => Auth::user()->company_id,
];
HrLeaveTypeDetail::create($insert_array );
}
DB::commit();
Session::flash('success', 'Leave Type is created successfully');
return redirect()->route('hr.leave_types.index');
} catch (Exception $exception) {
dd($exception->getMessage());
DB::rollback();
Session::flash('error', 'Action failed! Please try again');
return redirect()->route('hr.leave_types.index');
}
}
При отправке я получил эту ошибку:
"SQLSTATE [23000]: нарушение ограничения целостности: 1062 Повторяющаяся запись '1-3- 1 'для ключа' hr_leave_type_details_uniq1 '(SQL: вставить в hr_leave_type_details
(no_of_days
, employment_type_id
, leave_type_id
, company_id
) (5, 1, 3, 1)) ◀ "
Повторяющаяся запись '1-3-1'
- это комбинации
employment_type_id
, leave_type_id
, company_id
Как мне заставить пользователя увидеть настроенную страницу, которая дублирует запись ... существует вместо запроса об ошибке выше?
Спасибо.