javascript - 如何使用 knexjs 在 psql 中的多行中插入数组
问题描述
我正在使用事务 outta knexjs 在 2 个表中插入值(1. 结果,2. 结果详细信息)。在表 2(resultdetail)中插入值时,我有一个对象数组,其大小随每个条目而变化(基于主题数)。
{
"name": "Sally",
"fathername": "John",
"rollno": "85a76",
"classname": "class1",
"detail": [
{
"subject": "History",
"marksobt": "50",
"totalmarks": "100"
},
{
"subject": "French",
"marksobt": "75",
"totalmarks": "75"
}
]
}
我正在尝试以下代码来执行此操作。(同样,“详细”数组的大小随主题数量而变化)
const { name, fathername, rollno, classname } = req.body;
db.transaction(trx => {
db.insert({
name: name,
fathername: fathername,
rollno: rollno,
classname: classname
}).into('results')
.transacting(trx)
.returning('rollno')
.then(roll_no => {
req.body.detail.map(result => {
return trx('resultdetail')
.returning('*')
.insert({
rollno: roll_no[0],
subject: result.subject,
marksobt: result.marksobt,
totalmarks: result.totalmarks
}).then(console.log)
})
})
.then(trx.commit)
.catch(trx.rollback)
})
.catch(err => res.status(400).json(err))
Unhandled rejection Error: Transaction query already complete, run with DEBUG=knex:tx for more info
解决方案
insertedRows = await knex('results').returning('*').insert([
{
"subject": "History",
"marksobt": "50",
"totalmarks": "100"
},
{
"subject": "French",
"marksobt": "75",
"totalmarks": "75"
}
]);
但主要是您的问题是您同时启动多个查询+提交,而无需等待较早的查询准备好...
当您将东西添加到第二个表时,它应该是这样的:
.then(roll_no => {
let resultsToAdd = req.body.detail.map(result => {
return {
rollno: roll_no[0],
subject: result.subject,
marksobt: result.marksobt,
totalmarks: result.totalmarks
};
});
return return trx('resultdetail')
.returning('*')
.insert(resultsToAdd);
})
推荐阅读
- php - Heroku 和 Memcachier (Memcached) 注销用户 (PHP)
- tfs - 如何克隆 TFS-2018 nuget feed?
- reactjs - React JS - 从渲染表中的行获取数据以编辑数据
- marklogic - 通过 curl PUT 插入时,MarkLogic 在 .xqy 文件中丢失了我的换行符
- swift - CALayer 隐藏 UIView 上方的 UILabel
- payment-request-api - Tez 付款请求 API
- vmware-clarity - vmware 清晰数据网格是否可以选择使用树数据?
- regex - ip 后删除 sed
- java - 使用 java Swing 显示 PopMenu
- ajax - 如何在codeigniter中使用ajax从控制器获取数据以查看