У меня есть базовый контроллер для общих операций вставки/обновления по всему API, использующий только словарь таблиц, поэтому мы можем использовать одну и ту же функцию для вставки данных во многие таблицы.
Проблема в том, что есть таблица, которая использует коррелятивное число, сгенерированное с помощью триггера, и когда sequelize возвращает вставленное значение, оно включает новый идентификатор, но корреляционное поле возвращается пустым, и мне нужно, чтобы оно отображалось на интерфейсе.
Я подумал о том, чтобы просто снова запросить новое поле к API или снова запросить его в той же функции сохранения, когда он включает в себя имена определенных таблиц, но есть ли способ сказать sequelize "ждать" этого нового сгенерированного значения и тогда верните данные в порядке? Так же, как получить новый идентификатор
Или, может быть, это нужно исправить в базе данных? У меня нет большого опыта в этой области, но мы используем 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 - поле, созданное с помощью триггера.
AFAIK, вам нужно запросить новую строку, если вы не используете Postgres (в этом случае вы можете попробовать опцию Model.create под названием "options.returning")
Два быстрых теста, которые НЕ решили проблему:
Надеюсь, у кого-то есть решение!