laravel 5.6 массовая вставка данных JSON

Я пытаюсь создать API для хранения и получения экзаменационных работ MCQ. Я использую класс ресурсов laravel для отправки обработки данных Json. Мне нужно вставить 40 записей в базу данных MySQL за один запрос без использования многомерных массивов. Есть ли способ?

Пример данных из внешнего интерфейса:

{
"data":[
{
"paper_id":"5",
"question_no":"2",
"question":"test insert code",
"answer1":"answer1",
"answer2":"answer2 ",
"answer3":"answer3 ",
"answer4":"Answer4 ",
"answerC":"Correct Answer",
"knowarea":"who knows!"
},

{
"paper_id":"5",
"question_no":"3",
"question":"test insert code",
"answer1":"answer1",
"answer2":"answer2 ",
"answer3":"answer3 ",
"answer4":"Answer4 ",
"answerC":"Correct Answer",
"knowarea":"who knows!"
},

{
"paper_id":"5",
"question_no":"4",
"question":"test insert code",
"answer1":"answer1",
"answer2":"answer2 ",
"answer3":"answer3 ",
"answer4":"Answer4 ",
"answerC":"Correct Answer",
"knowarea":"who knows!"
},

{
"paper_id":"5",
"question_no":"5",
"question":"test insert code",
"aanswer1":"answer1",
"answer2":"answer2 ",
"answer3":"answer3 ",
"answer4":"Answer4 ",
"answerC":"Correct Answer",
"knowarea":"who knows!"
}
]

} `

Внешний интерфейс отправляет 40 таких объектов, которые мне нужны, чтобы вставить их в базу данных.
Ниже приведен код моей функции магазина контроллера,

`   $paper->paper_id = $request->input('paper_id');
$paper->question_no = $request->input('question_no');
$paper->question = $request->input('question');
$paper->answer1 = $request->input('answer1');
$paper->answer2 = $request->input('answer2');
$paper->answer3 = $request->input('answer3');
$paper->answer4 = $request->input('answer4');
$paper->answerC = $request->input('answerC');
$paper->knowarea = $request->input('knowarea');

if($paper->save())
{
return new ExamPaperResource($paper);
}

Каковы мои варианты массовой вставки данных?

3

Решение

Основываясь на ваших данных образца, вы можете json_decode данные, а затем использовать один Model::insert():

{
"data":[
{
"paper_id":"5",
"question_no":"2",
"question":"test insert code",
"answer1":"answer1",
"answer2":"answer2 ",
"answer3":"answer3 ",
"answer4":"Answer4 ",
"answerC":"Correct Answer",
"knowarea":"who knows!"},
...
]
}

// Controller.php
public function store($json)
{
$data = json_decode($json, true);
Paper::insert($data);
}

Это создаст массивы из вашего json, а затем вставит все записи сразу.

2

Другие решения

Вы можете использовать: Eloquent :: insert ()

Как пример ниже.

$data = array(
array('name'=>'Coder 1', 'rep'=>'4096'),
array('name'=>'Coder 2', 'rep'=>'2048'),
//...
);

Coder::insert($data);
1

Попробуйте код ниже

$jsonarray =json_decode(json_encode($b),TRUE); // $b=your json array
foreach ($jsonarray as $key => $value)
{
foreach ($value as $a => $b)
{
$qry=DB::insert('insert into your_table(colomn_name1,colomn_name2)values(?,?)',[$b['indexname1'],$b['indexname2']]); //index name will be paper_id,question_no etc
}
}

ваш код будет выглядеть так

public function bulkdata(Request $request)
{

$b=$request->input('data');
$jsonarray =json_decode(json_encode($b),TRUE);
foreach ($jsonarray as $key => $value)
{

foreach ($value as $a => $b)
{

$qry=DB::insert('insert into yourtable(paper_id,question_no,question,answer1,answer2,answer3,answer4,answerC,knowarea)values(?,?,?,?,?,?,?,?,?)',[$b['paper_id'],$b['question_no'],$b['question'],$b['answer1'],$b['answer2'],$b['answer3'],$b['answer4'],$b['answerC']$b['knowarea']);
}
}

}
1

Этот код работает для меня. В него вставлены все 40 записей без проблем.

$array = $request->all();
foreach($array["data"] as $row)
{
Exam_Paper::create(['paper_id'      => $row["paper_id"],
'question_no'   => $row["question_no"],
'question'      => $row["question"],
'answer1'       => $row["answer1"],
'answer2'       => $row["answer2"],
'answer3'       => $row["answer3"],
'answer4'       => $row["answer4"],
'answerC'       => $row["answerC"],
'knowarea'      => $row["knowarea"],
]);

}
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector