我创建了一个自引用的belongsToMany关系,其中sequelize与模型作为through参数。
但是,当它创建表时,它只为其中一个关系创建一个外键。
型号:
const client = sequelize.define('client', {
ClientId: {
type: DataTypes.UUID,
primaryKey: true,
allowNull: false,
defaultValue: DataTypes.UUIDV4()
},
AccessMode: {
type: DataTypes.ENUM('allow_all', 'deny_all', 'selective'),
allowNull: false
}
}, {
classMethods: {
associate: function (models) {
// Tons of other relationships here
client.belongsToMany(models.client, {
through: models.clientAccess,
as: 'clientsWithAccess',
foreignKey: 'ClientId'
});
client.belongsToMany(models.client, {
through: models.clientAccess,
as: 'accessToClients',
foreignKey: 'AccessingClientId'
});
}
}
});
通过型号:
const clientAccess = sequelize.define('clientAccess', {
Access: {
type: DataTypes.ENUM('allow', 'deny'),
allowNull: false
}
}, {
timestamps: false
});
结果表只有AccessMode和AccessingClientId列。由于某种原因,AccessingClientId被设置为主键。
如果我切换了belongsToMany()语句的展示位置,那么表格中字段的名称也会反转。
答案 0 :(得分:0)
这是使用belongsToMany()方法的otherKey属性解决的。
client.belongsToMany(models.client, {
through: models.clientAccess,
as: 'clientsWithAccess',
foreignKey: 'ClientId',
otherKey: 'AccessingClientId'
});
client.belongsToMany(models.client, {
through: models.clientAccess,
as: 'accessToClients',
foreignKey: 'AccessingClientId',
otherKey: 'ClientId'
});
这样就可以在数据库中正确创建表了。