我有一个发布路线,该路线使用sequelize create方法将事件添加到数据库。我已经为用户和事件定义了表:
事件
const Events = sequelize.define('Events', {
Event_id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true
},
name: {
type: DataTypes.STRING,
allowNull: false
},
month: {
type: DataTypes.STRING,
allowNull: false
},
day:{
type:DataTypes.INTEGER,
allowNull: false
},
year: {
type: DataTypes.INTEGER,
allowNull: false
},
important:{
type: DataTypes.BOOLEAN,
allowNull: false,
defaultValue: false
},
description:{
type: DataTypes.STRING,
allowNull: true
}
});
return Events;
}
用户
const User = sequelize.define('Users', {
user_id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true
},
name: {
type: DataTypes.STRING,
allowNull: false
},
email: {
type: DataTypes.STRING,
allowNull: false
},
password: {
type: DataTypes.STRING,
allowNull: false
}
}, {});
User.associate = function(models){
User.hasMany(models.Events, {as: 'user'})
}
return User;
}
发布路线似乎正常运行,但由于sequelize无法将用户ID附加到所创建的事件上,因此
“无法添加或更新子行:外键约束失败(
planitdb
。events
,CONSTRAINTevents_ibfk_1
外部键(UserUserId
)参考{{1} }(users
上的“在更新级联时删除集为空””
我不确定我确切知道为什么会这样。我想我也需要在“事件”表中定义关系吗?如果是这样,我不确定我是否了解事件表与用户表之间的关系类型。还是这种关系是单个事件对单个用户的影响?
任何帮助将不胜感激。
答案 0 :(得分:0)
您的事件对象不包含user_id的映射。该对象需要包含user_id字段,并且在尝试向事件表中插入记录之前需要填充该字段。
编辑-包括sequelize关系解决方案:
代替此:
const Events = sequelize.define('Events', {...});
User.associate = function(models){
User.hasMany(models.Events, {as: 'user'})
}
尝试:
const Events = sequelize.define('Events', {...});
const User = sequelize.define('User', {...});
User.hasMany(Events, {as: 'user'});
或:
const Events = sequelize.define('Events', {});
const User = sequelize.define('User', {...});
Events.belongsTo(User,{
foreignKey: 'user_id',
constraints: false,
as: 'user'
});