如何使用Sequelize.js将数据插入桥接/映射表

时间:2019-05-30 10:53:00

标签: javascript sql orm mapping sequelize.js

我正在尝试使用sequelize.js将数据插入到桥接/映射表中

我将文章定义为-

const Articles = db.define('article', {
    "slug": {
      type: Sequelize.STRING,
      primaryKey: true,
      allowNull:false
    },
    "title": {
      type: Sequelize.STRING(50),
      allowNull: false
    },
    "description": {
      type: Sequelize.STRING(100),
    },
    "body": Sequelize.STRING,
  })

和标签as-

const Tags = db.define('tag', {
    name: {
      type: Sequelize.STRING,
      primaryKey: true
    }
})

我在他们之间创建了多对多关联

Articles.belongsToMany(Tags, {through:'article_tags'})
Tags.belongsToMany(Articles, {through:'article_tags'})

这在数据库中创建了一个表article_tags以及文章和标签。但是,现在如何使用sequelize将数据插入此article_tags桥接表中?

1 个答案:

答案 0 :(得分:0)

您还必须对映射表进行建模...。然后,当您在解析器中说“ tagArticle”之类的内容时,只需在映射表上调用带有文章ID和ID的create函数标签的...这是一个连接表解析器的示例,我在其中将经销商连接到帐户

createUserAccountDealer: async (_, args, { models }) => {

      let returnValue = null;
      const { username, input } = args;
      try {
        returnValue = await models.ProfileDealerInfo.create(input);

        if (returnValue && returnValue.dataValues.id) {
          const tempJoin = { username, dealer_id: returnValue.dataValues.id };
          await models.ProfileAccountDealer.create(tempJoin);
        }
      } catch (err) {
        logger.error(err);
      }
      return returnValue;
    }

对我来说,区别是经销商是帐户的子项,因此我在创建子经销商记录后立即进行加入记录...您的示例有点区别,其中标签和商品可能已经存在,而您可能只是关联它们意味着ID将从客户端传入args中,而您没有多余的步骤等待从创建的子记录中获取ID