tin*_*nks 8 javascript mysql node.js express sequelize.js
我试图在两个表之间设置1:1关系。RefreshToken表将有两个ForeignKey释放到Users表,如下图所示:

我使用sequelize-auto生成了我的sequelize模型。
用户模型:
module.exports = function(sequelize, DataTypes) {
return sequelize.define('Users', {
idUsers: {
type: DataTypes.INTEGER(11),
allowNull: false,
primaryKey: true
},
name: {
type: DataTypes.STRING(45),
allowNull: true
},
mail: {
type: DataTypes.STRING(45),
allowNull: false,
primaryKey: true
}
}, {
tableName: 'Users'
});
};
Run Code Online (Sandbox Code Playgroud)
RefreshToken模型:
module.exports = function(sequelize, DataTypes) {
return sequelize.define('RefreshToken', {
idRefreshToken: {
type: DataTypes.INTEGER(11),
allowNull: false,
primaryKey: true
},
token: {
type: DataTypes.TEXT,
allowNull: true
},
userId: {
type: DataTypes.INTEGER(11),
allowNull: false,
primaryKey: true,
references: {
model: 'Users',
key: 'idUsers'
}
},
userEmail: {
type: DataTypes.STRING(45),
allowNull: false,
primaryKey: true,
references: {
model: 'Users',
key: 'mail'
}
}
}, {
tableName: 'RefreshToken'
});
};
Run Code Online (Sandbox Code Playgroud)
运行应用程序时,出现以下错误:
未处理的拒绝错误:SequelizeDatabaseError:ER_CANNOT_ADD_FOREIGN:无法添加外键约束
我试图添加明确的关系,在用户表中添加:
User.associate = (models) => {
User.hasOne(models.RefreshToken, {
foreignKey: 'userId'
});
User.hasOne(models.RefreshToken, {
foreignKey: 'userEmail'
});
};
Run Code Online (Sandbox Code Playgroud)
并在RefreshToken中:
RefreshToken.associate = (models) => {
RefreshToken.belongsTo(models.Users, {
foreignKey: 'userId'
});
RefreshToken.belongsTo(models.Users, {
foreignKey: 'userEmail'
});
};
Run Code Online (Sandbox Code Playgroud)
但我再次收到相同的错误。如果删除RefreshToken表中的引用,我看不到任何错误,但是当我检查数据库时,我看不到任何具有用户的电子邮件和ID的外键关系约束
ber*_*gle 18
这是常见的类型错误,主要是由于
return sequelize.define('RefreshToken', {
userId: {
type: DataTypes.INTEGER(11), // The data type defined here and
references: {
model: 'Users',
key: 'idUsers'
}
},
return sequelize.define('Users', {
idUsers: {
type: DataTypes.INTEGER(11), // This data type should be the same
},
Run Code Online (Sandbox Code Playgroud)
您不能有两个主键,因此其他引用的键应定义为唯一。 unique:true
return sequelize.define('Users', {
idUsers: {
primaryKey: true
},
mail: {
type: DataTypes.STRING(45),
allowNull: false,
primaryKey: true // You should change this to 'unique:true'. you cant hv two primary keys in one table.
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11762 次 |
| 最近记录: |