首页 > 解决方案 > 如何在 Sequelize 中使用 onDelete Cascade

问题描述

我有一个消息模型,当我想删除一条消息时,我收到一个错误,因为它通过 hasMany 链接到喜欢/不喜欢,我与你分享我的模型:

型号留言:

    'use strict';
const { Model } = require('sequelize');
module.exports = (sequelize, DataTypes) => {
  class Message extends Model {
    static associate(models) {

      models.Message.belongsTo(models.User, {
        foreignKey: {
          allowNull: false
        }
      });

      models.Message.belongsTo(models.Message, {
        as: 'message',
        foreignKey: 'userId',
        targetKey: 'id'
      })

      models.Message.hasMany(models.Like, {
        as: 'like',
        foreignKey: {
          name: 'messageId',
          allowNull: true
        },
        onDelete: 'CASCADE'
      })
    }
  };
  Message.init({
    userId: DataTypes.INTEGER,
    idParent: DataTypes.INTEGER,
    content: DataTypes.STRING,
    attachement: DataTypes.STRING,
    tags: {
      type: DataTypes.JSON,
      allowNull: true,
      defaultValue: null
    }
  }, {
    sequelize,
    modelName: 'Message',
  });
  return Message;
};

模型喜欢:

'use strict';
module.exports = (sequelize, DataTypes) => {
  var Like = sequelize.define('Like', {
    messageId: {
      type: DataTypes.INTEGER,
      primaryKey :true,
      references: {
        model: 'Message',
        key: 'id'
      }
    },
    userId: {
      type: DataTypes.INTEGER,
      primaryKey :true,
      references: {
        model: 'User',
        key: 'id'
      }
    },
    isLike: DataTypes.INTEGER
  }, {});
  Like.associate = function(models) {
    // associations can be defined here

    models.Like.belongsTo(models.User, {
      foreignKey: 'userId',
      as: 'user',
    });

    models.Like.belongsTo(models.Message, {
      foreignKey: 'messageId',
      as: 'message',
    });
  };
  return Like;
};

我有几个问题:

  1. 我的 onDelete: 'cascade' 在正确的位置吗?
  2. 如何修改我的迁移文件以便考虑 onDelete?

谢谢。

标签: expresssequelize.jscascade

解决方案


推荐阅读