Обработка многоступенчатой ​​формы в Laravel

Я новичок в laravel, мне нужно вставить много полей формы в базу данных, поэтому я разделил поля на несколько разделов, чего я хочу достичь, так это сохранить данные каждого раздела, когда пользователь нажимает следующую кнопку и изменяется шаг, и когда пользователь нажимает предыдущую кнопку и вносит некоторые изменения, база данных должна быть обновлена, и если пользователь оставляет форму незавершенной, тогда, когда он войдет в систему в следующий раз, заполнение формы должно заполниться с того шага, который он оставил, до сих пор я успешно сменил шаги и на первом шаге 1 вставил данные в базу данных и для другого шага я обновил базу данных, но у меня возникнут проблемы, если пользователь перейдет к первому шагу и снова изменит поля форм, как снова обновить данные первого шага Я использую ajax для отправки данных и количества шагов

Мой Контроллер

    function saveJobPostFirstStage(Request $request)
    {
    $currentEmployer = Auth::guard('employer')->user();
   //$data['currentEmployer'] = $currentEmployer;
     $employer_id = $currentEmployer->id;
      $random = $this->generateRandomString();
       $jobOne = new Job();
       //Session::pull('insertedId');

  if ($request->ajax()) {

        try {

            $stepPost = $request->all();

                $step = $stepPost['stepNo'];
                $insertedId = $stepPost['insertedId'];
                switch ($step) {
                    case '1':
                        if ($insertedId == 0) {

                        $jobOne->employer_id = $employer_id;
                        $jobOne->job_title = $stepPost['jobTitle'];

                        $jobOne->company_id = (int)$stepPost['companyName'];
                        $jobOne->country_id = (int)$stepPost['country'];
                        $jobOne->state_id = (int)$stepPost['state'];
                        $jobOne->city_id = (int)$stepPost['city'];
                        $jobOne->street_address = $stepPost['street'];
                        $jobOne->job_code = $random;


                        $stepOne = $jobOne->save();
                          if ($stepOne) {

                               Session::put('insertedId',$jobOne->id);
                           //session(['insertedId'=>$jobOne->id]);
                                $success = ['success' => "Success",
                                                'insertedId' => $jobOne->id];
                                //return json_encode($success);  

                              } 

                        }
                        else
                        {
                        $jobOne->employer_id = $employer_id;
                        $jobOne->job_title = $stepPost['jobTitle'];

                        $jobOne->company_id = (int)$stepPost['companyName'];
                        $jobOne->country_id = (int)$stepPost['country'];
                        $jobOne->state_id = (int)$stepPost['state'];
                        $jobOne->city_id = (int)$stepPost['city'];
                        $jobOne->street_address = $stepPost['street'];
                        $jobOne->job_code = $random;

                        $stepOne = $jobOne->whereId($insertedId)->update(['employer_id'=>$jobOne->employer_id,'job_title'=>$jobOne->job_title,'company_id'=> $jobOne->company_id,'state_id'=>$jobOne->state_id,'country_id'=>$jobOne->country_id,'city_id'=>$jobOne->city_id,'street_address'=>$jobOne->street_address,'job_code'=>$jobOne->job_code = $random]);
                        if ($stepOne) {

                                $success = ['success' => "Changes Made Successfully"];
                                return json_encode($success);        
                              } 
                        }
                        break;

                        case '2':


                            $jobOne->employment_type_id = (int)($stepPost['employmentType']);
                            $jobOne->job_type_id = (int)($stepPost['jobType']);
                            $jobOne->job_level_id = (int)($stepPost['jobLevel']);
                            $jobOne->industry_type_id = (int)($stepPost['industryType']);
                            $jobOne->job_category_id = (int)($stepPost['jobCategory']);
                            //$jobOne->salary = $stepPost['jobSalaryRange'];
                            $jobOne->salary_period_id = (int)$stepPost['salaryPeriod'];
                            //$jobOne->vacancy_end_date = $stepOne['applicationDeadline'];
                            $stepOne = $jobOne->whereId($insertedId)->update(['employment_type_id'=> $jobOne->employment_type_id,'job_type_id'=>$jobOne->job_type_id,'job_level_id'=> $jobOne->job_level_id,'industry_type_id'=>$jobOne->industry_type_id,'job_category_id'=>$jobOne->job_category_id,'salary_period_id'=>$jobOne->salary_period_id]);
                        if ($stepOne) {

                                $success = ['success' => "Changes Made Successfully"];
                                return json_encode($success);        
                              } 



                        break;

                        case '3':
                        $jobOne->job_description = $stepPost['jobDescription'];
                        $jobOne->job_specification = $stepPost['jobSpecifications'];
                        $jobOne->job_responsibilities = $stepPost['jobResponsibilities']; 

                        $stepOne = $jobOne->whereId($insertedId)->update(['job_description'=>$jobOne->job_description,'job_specification'=>$jobOne->job_specification,'job_responsibilities'=>$jobOne->job_responsibilities]);

                        if ($stepOne) {
                             $success = ['success' => "Changes Made Successfully"];
                                return json_encode($success);  
                        }

                    default:
                        # code...
                        break;
                }


            return json_encode($stepPost);







        //$this->alertMessage = 'Your Phone has been added Successfully.';
        //$this->alertType = 'success';
    } catch (QueryException $e) {
        return $e->getMessage();
    }

   /* return redirect()->route('employer-account-page')
        ->with([
            'alertMessage' => $this->alertMessage,
            'alertType' => $this->alertType
        ]);*/

      // $stepPost = Input::all();



  }
        /*$stepOne = $request->all();
        $country_Id = (int)$stepOne['country'];
        return json_encode((getType($country_Id)));*/



}
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
879
1

Ответы 1

Во-первых, ваш код запутан.

У вас должна быть одна таблица для каждой формы, где каждая форма имеет свой родительский идентификатор. Следующим шагом по рефакторингу кода будет создание одного контроллера для каждой формы (он вам не нужен, но вы этого хотите).

Каждая форма (модель) должна иметь метод, который пересчитывает собственные значения на основе других форм, так что если вы измените первую форму, вы можете вызвать метод, который пересчитывает вторую форму, а затем вызвать метод второй формы, который пересчитывает третья форма и т. д.

Этот интерфейс может быть полезен

interface IForm {
    public function getPreviousForm() : ?IForm; // These notations are since PHP7.1
    public function recalculate() : void;
    public function getNextForm() : ?IForm;
}

Простой код, как это должно работать на практике

$formX->save();
$formX->getNextForm()->recalculate(); // This will call formX->recalculate(); formX+1->getNextForm()->recalculate()
                                    // which will call formX+1->recalculate(); formX+2->getNextForm()->recalculate()
                                    // etc...
                                    // while getNextForm() != null

Это также может понадобиться, если вам нужно будет вставить другую форму в середину цепочки.

Надеюсь, это поможет

Другие вопросы по теме