laravel 5.6 bulk inserting json data

16,818

Solution 1

This code works for me. It inserted all 40 records with no problems.

$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"],
        ]);

    }

Solution 2

You can use: Eloquent::insert()

Like example below.

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

Coder::insert($data);
Share:
16,818
Naveed Sheriffdeen
Author by

Naveed Sheriffdeen

Updated on July 07, 2022

Comments

  • Naveed Sheriffdeen
    Naveed Sheriffdeen over 1 year

    I am trying to build an API to store and retrieve MCQ exam papers. I am using laravel resource class to send handle Json data. I need to insert 40 records into MySQL database in a single query without using multi dimensional arrays. Is there any method available?

    Sample data from front end:

    {
    "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!"
    
        }
    ]
    

    }`

    The front end send 40 such objects i need to bulk insert them into my database. The below code is my controller store function,

    `   $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);
        }
    

    What are my choices for bulk inserting the data?

  • Naveed Sheriffdeen
    Naveed Sheriffdeen over 5 years
    I need to insert 40 records at once this method ill have to write 40 arrays. i am looking for a smaller code
  • Naveed Sheriffdeen
    Naveed Sheriffdeen over 5 years
    no i need to insert 40 records at once. the data comes as a json object from front end if i am to insert it in your method wouldn't i have to write: `array('name'=> 'coder') 40 times.
  • Afinas EM
    Afinas EM about 5 years
    Worked for me :)