简体   繁体   中英

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 following are tables i want to populate.

调查记录

表单字段

form_fields_options

I want to populate as following. 结果1 结果2

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在此处输入图片说明 在此处输入图片说明 在此处输入图片说明

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM