Получение автоматически сгенерированного (через триггер) поля из вставки в sequelize

0

У меня есть базовый контроллер для общих операций вставки/обновления по всему 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 - поле, созданное с помощью триггера.

Теги:
sequelize.js

1 ответ

1

AFAIK, вам нужно запросить новую строку, если вы не используете Postgres (в этом случае вы можете попробовать опцию Model.create под названием "options.returning")

Два быстрых теста, которые НЕ решили проблему:

  • хук afterCreate - модель по-прежнему показывает поля, созданные триггером, как нулевые.
  • модель, имеющая значение по умолчанию из функции DB - модель показывает вызов функции, а не результат функции (что делает его в поле DB).

Надеюсь, у кого-то есть решение!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню