我有一个基本控制器,用于整个API的通用插入/更新操作,仅使用表字典,因此我们可以使用相同的函数将数据插入到许多表中。
问题是存在一个表,该表使用通过触发器生成的相关数字,当sequelize返回插入的值时,它包含新ID,但相关字段返回空,我需要它在界面上显示它。
我已经考虑过再次向API查询新字段,或者当它包含这些特定表名时再次在相同的save函数上查询它,但是有一种方法可以让续集“等待”这个新表生成值,然后返回数据好吗?就像获取新ID一样
或者这可能需要在数据库上修复?我在该领域经验不足,但是如果有帮助,我们正在使用MySQL。
function Init(models, dictionary) {
this.post = (req, res, next) => {
const { obj } = req.body;
const model = models[dictionary[obj._type]];
//Just stripping fields starting with "_"
const objClear = {};
for (const attr in obj) {
if (attr.charAt(0) !== '_') {
objClear[attr] = obj[attr];
}
}
//Saving
model.create(objClear).then(
(objSaved) => {
const data = {
obj: objSaved.get({ plain: true }),
action: 'inserted',
};
//I guess I could query the new row here again
res.json(data);
},
).catch(next);
};
}
module.exports = {
Init,
};
响应如下:
{"obj":{"TOTAL":"0","ID":14,...,"TRANSACTION_NO":""},"action":"inserted"}
其中TRANSACTION_NO是使用触发器生成的字段。
答案 0 :(得分:1)
AFAIK,除非使用Postgres,否则您必须查询新行(在这种情况下,您可以尝试使用Model.create选项“ options.returning”)
两个无法解决问题的快速测试:
希望其他人有解决方案!