node.js - 如何使用 sequelize 或 sequelize-cli 创建带有外键的连接表

标签 node.js join foreign-keys sequelize.js sequelize-cli

我正在为具有多对多关系的玩家和团队这两种类型创建模型和迁移。我正在使用 sequelize model:create,但看不到如何指定外键或连接表。

sequelize model:create --name Player --attributes "name:string"
sequelize model:create --name Team --attributes "name:string"

模型创建后,我添加关联。 在播放器中:

Player.belongsToMany(models.Team, { through: 'PlayerTeam', foreignKey: 'playerId', otherKey: 'teamId' });

在团队中:

Team.belongsToMany(models.Player, { through: 'PlayerTeam', foreignKey: 'teamId', otherKey: 'playerId' });

然后迁移运行

sequelize db:migrate

有球员和球队的表,但数据库中没有连接表(也没有外键)。如何创建外键和连接表?是否有关于如何执行此操作的明确指南?

最佳答案

我也有和你一样的问题,我已经搜索过,但没有运气。 这就是我所做的方式,我按照您的代码进行了修改。 我手动为连接表创建迁移。我为两个外键添加复合索引。

module.exports = {
  up: function(queryInterface, Sequelize) {
    return queryInterface.createTable('PlayerTeam', {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER
      },
    playerId: {
      type: Sequelize.INTEGER,
      allowNull: false,
      references: {
        model: 'Player',
        key: 'id'
      },
      onUpdate: 'cascade',
      onDelete: 'cascade'
    },
    teamId: {
      type: Sequelize.INTEGER,
      allowNull: false,
      references: {
        model: 'Team',
        key: 'id'
      },
      onUpdate: 'cascade',
      onDelete: 'cascade'
    },
      createdAt: {
        allowNull: false,
        type: Sequelize.DATE
      },
      updatedAt: {
        allowNull: false,
        type: Sequelize.DATE
      }
    }).then(() => {
      // Create Unique CompoundIndex
      let sql = `CREATE UNIQUE INDEX "PlayerTeamCompoundIndex"
              ON public."PlayerTeam"
              USING btree
              ("playerId", "teamId");
            `;
      return queryInterface.sequelize.query(sql, {raw: true});
      });
  },
  down: function(queryInterface, Sequelize) {
    return queryInterface.dropTable('PlayerTeam');
  }
};

关于node.js - 如何使用 sequelize 或 sequelize-cli 创建带有外键的连接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39651853/

相关文章:

join - 谷歌 BigQuery : prefix for all columns of joined table with duplicated names

mysql - 在 MySQL 中添加两个现有/已填充表之间的关系

sql - 如何使用 ALTER TABLE 在 Oracle-SQL 中删除内联外键?

JavaScript 错误未显示在控制台中?

javascript - Node js - 理解变量范围

mysql - 从连接查询中获取不同的值(连接表)

mysql - JOIN ids 以 0 作为父 id,查询具有不同父 id 的 id

mysql - 添加带有更新级联的外键

javascript - node.js 中的 UDP 跟踪器抓取意外返回零

javascript - Nodejs 解析获取包含对象 [Symbol(map)] 的响应