Как сохранить базу данных с несколькими массивами json в laravel?

Я работаю на портале онлайн-экзаменов после завершения экзамена. Я хочу сохранить данные о результатах пользователя в базе данных, все данные поступают из API.

Данные выглядят как

{
"user_id": "420",
"test_id": "2",
"question_id": [
    "12",
    "13"
],
"c_ans": [
    "a",
    "b"
],
"ans": [
    "a",
    "b"
]

}

Мой массив данных Question_id успешно хранится, но не c_ans и массив.

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

   $fbres       = new Testapp;
    $json        = $request->all();
    $data        = $json;

    $finalData = array();
    $blankArr = array();
    //Check for array 1-d or 2-d
    if(isset($data["user_id"])){
      array_push($blankArr, $data);
    }else{
     $blankArr = $data;
    } 

    foreach ($blankArr as $key => $value)
    {

        $usr_id     = $value['user_id']['0'];
        $test_id    = $value['test_id']['0'];
        $c_ans      = $value['c_ans']['0'];
        $ans        = $value['ans']['0'];



        foreach($value['question_id'] as $k => $v){
             $finalData = array('user_id'=> $usr_id, 'question_id'=> $v, 'test_id'=> $test_id,'c_ans' => $c_ans,'ans'=>$ans);
              $store= $fbres::insert($finalData);
        } 
    }

    if($store)
  {
    return response([
                'Success' => "1",
                'Message' => "Result Submitted Successfull..."
            ]);   
  }

Asnwer хранитсяthis is issue

Можете ли вы вставить рассматриваемый print_r ($ value)? Легко отлаживать.

amku91 10.09.2018 09:25

не используйте индекс 0 в цикле foreach только для $ c_ans и $ ans veriable. замените это и попробуйте. $ c_ans = $ значение ['c_ans']; $ ans = $ значение ['ans'];

Payal Pandav 10.09.2018 09:29
0
2
1 302
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете сделать что-то вроде этого в соответствии со своими данными:

$fbres       = new Testapp;
    $json        = $request->all();
    $data        = $json;

    $finalData = array();
    $blankArr = array();
    //Check for array 1-d or 2-d
    if(isset($data["user_id"])){
      array_push($blankArr, $data);
    }else{
     $blankArr = $data;
    } 

    foreach ($blankArr as $key => $value)
    {

        $usr_id     = $value['user_id'];
        $test_id    = $value['test_id'];




        foreach($value['question_id'] as $k => $v){
             $c_ans      = $value['c_ans'][$k];
             $ans        = $value['ans'][$k];
             $finalData = array('user_id'=> $usr_id, 'question_id'=> $v, 'test_id'=> $test_id,'c_ans' => $c_ans,'ans'=>$ans);
              $store= $fbres::insert($finalData);
        } 
    }

    if($store)
  {
    return response([
                'Success' => "1",
                'Message' => "Result Submitted Successfull..."
            ]);   
  }

Проблема в том, что $ c_ans, $ ans и quest_id имеют соответствие один в один. Так что извлекайте значение также одно за другим.

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

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