使用 knex mysql 添加多个 entries/rows

Adding multiple entries/rows with knex mysql

我从 req.body 中得到以下数据:

{
    "user_id": "1",
    "user_name": "jkalandarov",
    "email": "jkalandarov@gmail.com",
    "courses": [
        {
            "course_id": 1,
            "course_name": "English",
            "course_price": 265
        },
        {
            "course_id": 2,
            "course_name": "Node.js",
            "course_price": 200
        },
        {
            "course_id": 3,
            "course_name": "Backend Developement",
            "course_price": 300
        }        
    ]
}

我想在 knex 的帮助下将这些数据插入到 mysql 数据库 table 的三行中,就像这样通过单个查询:

有什么想法吗?

提前致谢!

假设您已经设置了 knex 连接,它应该只允许您将对象数组传递到 insert 函数中,以便使用单个语句插入多行。 https://knexjs.org/#Builder-insert

第 1 步:构建对象数组

const objectsToInsert = req.body.courses.map(course => {
    return {
        user_id: req.body.user_id,
        user_name: req.body.user_name,
        email: req.body.email,
        ...course
    }
});

第 2 步:使用您的 knex 连接插入它们

await knex('your_table_name').insert(objectsToInsert);

这应该在单个查询中将这三行插入到您的 table 中。

由于此数据直接来自请求正文,因此在此处添加一些验证显然也是一个好主意,但这超出了您最初问题的范围。