Повторное извлечение данных из другой таблицы и вставка их в новую sequelize

#mysql #node.js #sequelize.js

#mysql #node.js #sequelize.js

Вопрос:

Я работал над проектом, который включает sequelize (MySQL DB).

Итак, у меня есть таблица «InterestRate», которая принимает идентификаторы из двух других таблиц (внешние ключи).

таблица

BankID хранится в таблице «Банки», а interId хранится в другой таблице под названием «Проценты». Теперь я хочу заполнить эту таблицу с помощью Postman, отправив эти данные:

 {
    "bank": "BankName",
    "inter": "Interest",
    "nks": "4.11",
    "eks": "6.24",
    "time": "36"
}
 

НО я хочу заполнить таблицу первичными ключами этих значений (если они существуют в их собственной таблице). Например, когда я отправляю postman, я хочу проверить таблицу «Банки» и выполнить поиск «BankName», захватить ее идентификатор в этой таблице и поместить его в новую таблицу. То же самое для этой промежуточной вещи.

Код, который у меня есть rn, — это мусор, я знаю, почему он не работает, но я действительно застрял.

 (req, res) => {
  const bank = req.body.bank;
  const type = req.body.type;
  const nks = req.body.nks;
  const eks = req.body.eks;
  const time = req.body.time;

  InterestRate.create({
    bankId: bank,
    interId: type,
    NKS: nks,
    EKS: eks,
    time: time,
  })
    .then(() => {
      res.status(200).json({ message: 'Added successfully' });
    })
    .catch((err) => {
      res.status(500).send('Error -> '   err);
    });
};

 

Обратите внимание, что все модели и т.д. настроены правильно, это работает, если я ввожу данные вручную!
Спасибо!

Ответ №1:

Вам просто нужно получить Bank и Interest по именам и использовать найденные экземпляры модели, чтобы получить их идентификаторы для создания InterestRate записи:

 async (req, res) => {
  const bank = req.body.bank;
  const type = req.body.type;
  const nks = req.body.nks;
  const eks = req.body.eks;
  const time = req.body.time;

  const foundBank = await Bank.findOne({
    where: {
      name: bank // use a real field name instead of "name"
    }
  })
  const foundInterest = await Interest.findOne({
    where: {
      name: type // use a real field name instead of "name" 
    }
  })
  if(!foundBank) {
    // here should be some "res.status(...).send(...)" with error message
    return
  }
  if(!foundInterest) {
    // here should be some "res.status(...).send(...)" with error message
    return
  }
  try {
    await InterestRate.create({
        bankId: foundBank.id,
        interId: foundInterest.id,
        NKS: nks,
        EKS: eks,
        time: time,
      })
    res.status(200).json({ message: 'Added successfully' });
  catch (err) {
    res.status(500).send('Error -> '   err);
  }
};