Reputation: 55
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.
I want to populate as following.
Upvotes: 0
Views: 697
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);
}
Upvotes: 1