如何使用 sequelize 或 sequelize-cli 使用外键创建连接 table
How to create join table with foreign keys with sequelize or sequelize-cli
我正在为具有多对多关系的玩家和团队这两种类型创建模型和迁移。我正在使用 sequelize model:create,但看不到如何指定外键或加入 tables.
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
玩家和团队有 table,但数据库中没有连接 table(也没有外键)。如何创建外键和连接 table?是否有关于如何执行此操作的权威指南?
我也有和你一样的问题,我已经搜索过了,但是没有运气。
这就是我所做的,我按照您的代码进行了修改。
我手动为加入 table 创建迁移。我为两个外键添加了复合索引。
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');
}
};
我正在为具有多对多关系的玩家和团队这两种类型创建模型和迁移。我正在使用 sequelize model:create,但看不到如何指定外键或加入 tables.
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
玩家和团队有 table,但数据库中没有连接 table(也没有外键)。如何创建外键和连接 table?是否有关于如何执行此操作的权威指南?
我也有和你一样的问题,我已经搜索过了,但是没有运气。 这就是我所做的,我按照您的代码进行了修改。 我手动为加入 table 创建迁移。我为两个外键添加了复合索引。
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');
}
};