Как создать или обновить несколько таблиц с помощью Sequelize? - PullRequest
0 голосов
/ 19 февраля 2020

Я работаю над разработкой бэк-энда с БД с использованием Sequelize ORM. Мне нужно создать данные в несколько таблиц или обновить данные в несколько таблиц. но я не уверен, как это сделать. Вот мой пример ниже:

//Tables
const main = sequelize.define('main', {
id: {type: Sequelize.STRING, primaryKey: true},
column1: Sequelize.STRING,
column2: Sequelize.STRING,
column3: Sequelize.STRING,
}, {
tableName: 'main'
});

const table1 = sequelize.define('table1', {
column1: Sequelize.STRING,
column2: Sequelize.STRING,
column3: Sequelize.STRING,
mainId: Sequelize.STRING,
}, {
tableName: 'table1'
});

const table2 = sequelize.define('table1', {
column1: Sequelize.STRING,
column2: Sequelize.STRING,
column3: Sequelize.STRING,
mainId: Sequelize.STRING,
}, {
tableName: 'table2'
});

//relation with tables
table1.belongsTo(MAIN, {foreignKey: 'mainId'});
MAIN.hasMany(table1, {foreignKey: 'mainId'});
table2.belongsTo(MAIN, {foreignKey: 'mainId'});
MAIN.hasMany(table2, {foreignKey: 'mainId'});
table3.belongsTo(MAIN, {foreignKey: 'mainId'});
MAIN.hasMany(table3, {foreignKey: 'mainId'});

//Input Body(JSON)
{
"id": "MAIN0001",
"column1": "string",
"column1": "string",
"column3": "string",
"table1": {
  "column1": "string",
  "column2": "string",
  "column3": "string",
  "mainId": "MAIN0001",
  },
"table1": {
  "column1": "string",
  "column2": "string",
  "column3": "string",
  "mainId": "MAIN0001",
  },
"table2": {
  "column1": "string",
  "column2": "string",
  "column3": "string"
  "mainId": "MAIN0001",
  }
}

Это все пример того, что я собираюсь сделать. Пожалуйста, дайте мне знать, как я могу это сделать.

Спасибо заранее: D

1 Ответ

0 голосов
/ 19 февраля 2020

Есть немало способов. Вот несколько

Использование транзакций

try {

  const result = await sequelize.transaction(async (t) => {

    const createdMain = await main1.create({
      column1: 'string',
      column2: 'string',
      column3: 'string',
    }, { transaction: t });

    const createdTable1 = await table1.create({
      column1: 'string',
      column2: 'string',
      column3: 'string',
      mainId: createdMain.id
    }, { transaction: t });

    return {
      ...createdMain,
     table1: createdTable1,
    };
  });

} catch (error) {

  // If the execution reaches this line, an error occurred.
  // The transaction has already been rolled back automatically by Sequelize!

}

Создание main и table1 за один шаг:

return main1.create({
   column1: 'string',
   column2: 'string',
   column3: 'string',
   table1: {
     column1: 'string',
     column2: 'string',
     column3: 'string',
   },
   // Repeat for table 2 and table 3
}, {
    include: [ table1 ]
  // Include table 2 and table 3
  }]
});
...