首页 > 解决方案 > 从另一个表中检索数据并将其插入到新表中

问题描述

我一直在从事一个涉及 sequelize(MySQL DB)的项目。

所以我有一个表“InterestRate”,它从另外两个表(外键)中获取 id。

桌子

bankId 存储在“Banks”表中,interId 存储在另一个名为“Interest”的表中。现在我想通过发送这些数据来用 Postman 填充这个表:

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

我想用这些值的主键填充表(如果存在于他们自己的表中)。例如,当我发送给邮递员时,我想检查表“Banks”并搜索“BankName”,并在该表中获取其 id,并将其放入新表中。这间事情也一样。

我拥有的代码是垃圾,我知道为什么它不起作用,但我真的被卡住了。

(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);
    });
};

请注意,所有模型等都已正确设置,如果我手动输入内容,它就可以工作!谢谢!

标签: mysqlnode.jssequelize.js

解决方案


您只需要通过名称获取BankInterest使用找到的模型实例来获取它们的 id 来创建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);
  }
};

推荐阅读