平衡关系外键约束

时间:2019-11-21 21:11:10

标签: mysql node.js sequelize.js

我有一个发布路线,该路线使用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附加到所创建的事件上,因此

  

“无法添加或更新子行:外键约束失败(planitdbevents,CONSTRAINT events_ibfk_1外部键(UserUserId)参考{{1} }(users上的“在更新级联时删除集为空””

我不确定我确切知道为什么会这样。我想我也需要在“事件”表中定义关系吗?如果是这样,我不确定我是否了解事件表与用户表之间的关系类型。还是这种关系是单个事件对单个用户的影响?

任何帮助将不胜感激。

1 个答案:

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