首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >laravel 5.6批量插入json数据

laravel 5.6批量插入json数据
EN

Stack Overflow用户
提问于 2018-02-19 15:42:36
回答 5查看 16K关注 0票数 6

我正在尝试构建一个API来存储和检索MCQ试卷。我正在使用laravel资源类来发送句柄Json数据。我需要在不使用多维数组的情况下,在一个查询中插入40条记录到MySQL数据库中。有没有可用的方法?

来自前端的示例数据:

代码语言:javascript
复制
{
"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个这样的对象,我需要将它们批量插入到我的数据库中。下面的代码是我的控制器存储函数,

代码语言:javascript
复制
`   $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);
    }

批量插入数据的选择是什么?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2018-02-19 18:53:20

这段代码适用于我。它插入了全部40条记录,没有任何问题。

代码语言:javascript
复制
$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
EN

Stack Overflow用户

发布于 2018-02-19 17:04:12

根据示例数据,您可以对数据执行json_decode操作,然后使用单个Model::insert()

代码语言:javascript
复制
{
  "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创建数组,然后一次插入所有记录。

票数 4
EN

Stack Overflow用户

发布于 2018-02-19 16:04:44

您可以使用: Eloquent::insert()

就像下面的例子。

代码语言:javascript
复制
$data = array(
    array('name'=>'Coder 1', 'rep'=>'4096'),
    array('name'=>'Coder 2', 'rep'=>'2048'),
    //...
);

Coder::insert($data);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48861486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档