php - laravel 5.6批量插入json数据

标签 php mysql json laravel bulkinsert

我正在尝试构建一个 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 个这样的对象,我需要将它们批量插入到我的数据库中。 下面的代码是我的 Controller 存储函数,

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

对于批量插入数据,我有哪些选择?

最佳答案

根据您的示例数据,您可以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 创建数组,然后一次插入所有记录。

关于php - laravel 5.6批量插入json数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48861486/

相关文章:

javascript - 在 PHP 后端访问 XMLHttpRequests send(data)

php - 'PDOException' 消息 'SQLSTATE[HY093] : Invalid parameter number:

javascript - 输入表单和更改表单 PHP MySQL

php - 想知道.. mysql 和 mysqli 是否可以同时在同一个网站上使用?

php - 当尝试在页面的两个部分中使用 PHP 时,为什么会出现 undefined variable 错误?

mysql - 与哪里唱的情况

javascript - 如何将一个 JSON 行重新映射到分层 JSON?

用于单个 MySQL 多行 INSERT 的 PHP,每行都有 LAST_INSERT_ROW?

ruby - 在 Ruby 中解析 JSON 字符串

json - 将外部数据文件上传到 Apache Solr 的方法