【问题标题】:How to create join table with foreign keys with sequelize or sequelize-cli如何使用 sequelize 或 sequelize-cli 创建带有外键的连接表
【发布时间】:2016-09-24 00:30:00
【问题描述】:

我正在为具有多对多关系的玩家和团队这两种类型创建模型和迁移。我正在使用 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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2014-08-10
      • 1970-01-01
      • 2021-12-21
      • 2018-01-05
      • 1970-01-01
      • 1970-01-01
      • 2019-05-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多