Laravel - Как настроить перехват ошибок при дублировании ошибок - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть этот код контроллера в моем 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

Как мне заставить пользователя увидеть настроенную страницу, которая дублирует запись ... существует вместо запроса об ошибке выше?

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...