Sequelize - как определить триггер в модели? - PullRequest
0 голосов
/ 14 апреля 2020

В настоящее время я работаю с sequelize на RDS Aurora DB, и мне нужно отследить, какие записи, из каких таблиц были удалены - для этого я создал новую таблицу dbLog. Теперь мне нужно добавить триггер в базу данных, который сохраняет идентификатор записи в таблице dbLog всякий раз, когда эта запись в таблице t1 удаляется. По сути, мне нужно охватить два сценария ios для уже развернутых баз данных и тех, которые еще не существуют.

  1. База данных уже существует. Это легко, так как я могу создать триггер по необработанному запросу, как этот
CREATE TRIGGER trigger AFTER DELETE ON t1 FOR EACH ROW 
INSERT INTO dbLog ( id, tableName, status, updatedAt ) 
VALUES (OLD.id, 't1', 'D', NOW())`
База данных не существует. Это проблематично c, так как он создается созданием модели и затем sequelize.syn c (). Поэтому я не могу просто вызвать необработанный запрос, вместо этого мне нужно определить этот триггер в модели для таблицы t1. Так я запускаю таблицу (упрощенно)
t1.init(
        {
            id: {
                type: new DataTypes.BIGINT,
                autoIncrement: true,
                primaryKey: true
            },
            name: {
                type: new DataTypes.STRING,
                allowNull: false
            }    
        },
        {
            sequelize,           
            tableName: 't1',
        }
    );

Проблема в том, что я не знаю, как создать этот триггер. Я попытался поместить что-то подобное в раздел атрибутов t1.Init. Но есть некоторая проблема, когда я проверяю базу данных на наличие триггеров, ни один не был создан. Как я могу это исправить? И даже триггеры, созданные этим способом, эквивалентны 1: 1 триггерам, созданным необработанным запросом? Большое спасибо.

hooks: {
    afterDestroy: function(t1) {
        DbLog.create({
           id: t1.id,
           tableName: 't1',
           status: 'D',
           updatedAt: '2015-10-02'
           })
       }
   }

1 Ответ

0 голосов
/ 14 апреля 2020

Вы должны создать триггеры в БД вручную, выполнив необработанный запрос SQL. Если вы используете миграции, просто создайте миграцию с созданием триггера (также необработанный запрос SQL).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...