Tayyab Khan Shinwari
Tayyab Khan Shinwari

Reputation: 55

How to Populate MySQL Database with JSON array of objects in Laravel?

I am trying to create dynamic survey "Form" using formbuilder. I am getting JSON array of objects through an AJAX request. My job is to store the "Form" related data such as field_type, label and name etc. I can decode the array but i do not have any idea how to store multiple array of objects in the database according to their tables.

The form can contain number of different field types. Such as radio, selection boxes, etc.

//Controller.php

 public function ajaxdata(Request $request){

        $data= json_decode($request->id,true);

        foreach ($data as $key => $value) {
             
          if(isset($value['values'])){
            
            $group[] = $value['values'];

            foreach($group as $group_member){

                if($group_member['selected']==true){
                    $selected = $group_member['value'];
                }
                
            }

          }
                $value_label[] = $value['label'];
                $value_name[]  = $value['name'];
                $value_type[] = $value['type'];
                

                }
 return response()->json($data);
    }

The array objects i am getting in controller

The following are tables i want to populate.

survey_records

forms_fields

form_fields_options

I want to populate as following. Result1 Result2

Upvotes: 0

Views: 697

Answers (1)

Tayyab Khan Shinwari
Tayyab Khan Shinwari

Reputation: 55

In case if someone needs the solution below is the complete code.

    public function ajaxdata(Request $request){

        $data= json_decode($request->id,true);

        foreach ($data as $key => $value) {
             
          if(isset($value['values'])){

            foreach ($value['values'] as $group) {

                if($group['selected']==true && $value['name']=='group'){

                $s_group_id = $group['value'];

            }
 
            }
            
            
            // major if ending for values checking
          }

                $value_label[] = $value['label'];
                $value_name[]  = $value['name'];
                $value_type[] = $value['type'];
                if(isset($value['values'])){
                $value_values[] = $value['values'];
                
                }
               


         // major foreach ending  

        }   

        

        // query for  create survey_ table

        $id = DB::table('survey_records')
        ->insertGetId(array(
            's_assign_by' => Auth::user()->user_type,
            's_group_id' => $s_group_id,
            "created_at" =>  \Carbon\Carbon::now(), # new \Datetime()
            "updated_at" => \Carbon\Carbon::now(),  # new \Datetime()
        ));

        // // query for creating survey_fields

        $row = count($value_label);


         $textcounter = 0;
         $selectoncounter = 0;
         $radiocounter = 0;
         $passwordcounter = 0;
         $textareacounter = 0;
         $checkboxcounter=0;
         $counter;
         $field_number;
        for($i=0;$i<$row;$i++){

        if($value_type[$i]=='text'){
            $textcounter++;
            $counter = $textcounter;
            $field_number=1;
        }

        elseif($value_type[$i]=='select') {
            $selectoncounter++;
            $counter = $selectoncounter;
            $field_number=2;
        }

        elseif($value_type[$i]=='radio-group'){
            $radiocounter++;
            $counter = $radiocounter;
            $field_number=3;
        }

        elseif($value_type[$i]=='textarea'){
            $textareacounter++;
            $counter = $textareacounter;
            $field_number=4;
        }

        elseif($value_type[$i]=='checkbox-group'){
            $checkboxcounter++;
            $counter = $checkboxcounter;
            $field_number=5;
        }


        $field_id =  DB::table('survey_fields')
        ->insertGetId(array(
            'survey_id' => $id,
            'field_number' => $field_number,
            'field_label' => $value_label[$i],
            'field_type' => $value_type[$i],
            'field_added_by' => Auth::user()->user_type,
            'field_counter' => $counter,
            "created_at" =>  \Carbon\Carbon::now(), # new \Datetime()
            "updated_at" => \Carbon\Carbon::now(),  # new \Datetime()
        ));


         // database query for option_fields

         
          
          if($value_type[$i] =='text'){

            $opt_id =  DB::table('survey_options')
        ->insertGetId(array(
            'survey_id' => $id,
            'field_id' => $field_id,
            'opt_heading' => $value_label[$i],
            'opt_added_by' => Auth::user()->user_type,
            "created_at" =>  \Carbon\Carbon::now(), # new \Datetime()
            "updated_at" => \Carbon\Carbon::now(),  # new \Datetime()
        ));

        // if text and textarea ending

          }

          if($value_type[$i] =='textarea'){

            $opt_id =  DB::table('survey_options')
        ->insertGetId(array(
            'survey_id' => $id,
            'field_id' => $field_id,
            'opt_heading' => $value_label[$i],
            'opt_added_by' => Auth::user()->user_type,
            "created_at" =>  \Carbon\Carbon::now(), # new \Datetime()
            "updated_at" => \Carbon\Carbon::now(),  # new \Datetime()
        ));

        // if textarea ending

          }


          elseif($value_type[$i] =='select'){

            $select_label =$data[$i]['values']; 

            // $selectrow = count($select_label);
            $selectrow = count($select_label);


            for($j=0;$j<$selectrow;$j++){
            $opt_id =  DB::table('survey_options')
        ->insertGetId(array(
            'survey_id' => $id,
            'field_id' => $field_id,
            'opt_heading' => $select_label[$j]['label'],
            'opt_added_by' => Auth::user()->user_type,
            "created_at" =>  \Carbon\Carbon::now(), # new \Datetime()
            "updated_at" => \Carbon\Carbon::now(),  # new \Datetime()
        ));

        // for ending for select
            }
    // elseif ending
            }



          elseif($value_type[$i] =='checkbox-group'){

             $check_label =$data[$i]['values']; 
             $checkrow = count($check_label);

            for($k=0;$k<$checkrow;$k++){
            $opt_id =  DB::table('survey_options')
        ->insertGetId(array(
            'survey_id' => $id,
            'field_id' => $field_id,
            'opt_heading' => $check_label[$k]['label'],
            'opt_added_by' => Auth::user()->user_type,
            "created_at" =>  \Carbon\Carbon::now(), # new \Datetime()
            "updated_at" => \Carbon\Carbon::now(),  # new \Datetime()
        ));

        // for ending for checkbox
            }
          
  // elseif ending
}

           elseif($value_type[$i] =='radio-group'){
             $radio_label =$data[$i]['values']; 
           $radiorow = count($radio_label);
            
            // $radioroworg[] = $value_values[$i];
            // $radiorow = count($radioroworg);

            for($l=0;$l<$radiorow;$l++){
            $opt_id =  DB::table('survey_options')
        ->insertGetId(array(
            'survey_id' => $id,
            'field_id' => $field_id,
            'opt_heading' =>$radio_label[$l]['label'],
            'opt_added_by' => Auth::user()->user_type,
            "created_at" =>  \Carbon\Carbon::now(), # new \Datetime()
            "updated_at" => \Carbon\Carbon::now(),  # new \Datetime()
        ));

        // for ending for radio
            }

  // elseif ending
}

        // ending main for loop

        }

        

        // dd(json_decode($true));
            
              return response()->json($data);
        }

Populated tables images enter image description here enter image description here enter image description here

Upvotes: 1

Related Questions