迁移中在何处编写Sequelize关联

时间:2019-02-21 14:56:48

标签: orm foreign-keys sequelize.js

我在带有PostgreSQL数据库的Express应用程序中使用Sequelize ORM。我将表关系写在模型文件中。我使用此命令创建表。当我检查表时,没有外键。

sequelize db:migrate 

我附上了模型和迁移示例。我怎么了

Member.js model 
'use strict';
    module.exports = (sequelize, DataTypes) => {
      const Member = sequelize.define('Member', {
        mname: DataTypes.STRING,
        mpassword: DataTypes.STRING,
        memail: DataTypes.STRING,
        mphoto: DataTypes.STRING,
        mrole: DataTypes.STRING,
        mlastseen: DataTypes.STRING,
        cid: DataTypes.INTEGER
      }, {});

      Member.associate = function(models) {
        // associations can be defined here
        Member.belongsTo(models.Company);
        Member.belongsToMany(models.Project, {
          through: 'ProjectHasMamber',
          foreignKey: 'mid',
          as: 'mid'
        });
        Member.hasMany(models.Task, {
          foreignKey: 'mid',
          as: 'tasks'
        });
        Member.hasMany(models.Comment, {
          foreignKey: 'mid',
          as: 'comments'
        });
        Member.hasMany(models.ChatMessage, {
          foreignKey: 'mid',
          as: 'chatmessages'
        });
        Member.hasMany(models.ConversationReply, {
          foreignKey: 'mid',
          as: 'conversationreplies'
        });
      };
      return Member;
    };

“会员迁移”表

'use strict';
module.exports = {
  up: (queryInterface, Sequelize) => {
    return queryInterface.createTable('Members', {
      mid: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER
      },
      mname: {
        type: Sequelize.STRING
      },
      mpassword: {
        type: Sequelize.STRING
      },
      memail: {
        type: Sequelize.STRING
      },
      mphoto: {
        type: Sequelize.STRING
      },
      mrole: {
        type: Sequelize.STRING
      },
      cid: {
        type: Sequelize.INTEGER
      },
      createdAt: {
        allowNull: false,
        type: Sequelize.DATE
      },
      updatedAt: {
        allowNull: false,
        type: Sequelize.DATE
      }
    });
  },
  down: (queryInterface, Sequelize) => {
    return queryInterface.dropTable('Members');
  }
};

那么,我的错误在哪里?我没有附加其他模型和迁移。希望通过一个例子清楚这一点。我可以使用SQL查询来创建表和关系。这是一个解决方案。但是我想通过迁移来做到这一点。我曾要求Sequelize Slack小组参加,但还没有答复。我尝试使用“引用”关键字。不推荐使用。谢谢。

编辑: 在迁移中使用“引用”解决了该问题。这是一个示例:

cid: {
    type: Sequelize.UUID,
    references: {
      //Table name not same name with model, be careful! 
      model: 'Companies',
      key: 'cid'
    },
    onDelete: 'cascade'
  }

0 个答案:

没有答案