Где написать Sequelize ассоциации в миграциях - PullRequest
0 голосов
/ 21 февраля 2019

Я использую Sequelize ORM в своем приложении Express с базой данных PostgreSQL.Я записываю отношения таблиц в файлы моделей.Я использую эту команду для создания таблиц.Когда я проверяю таблицы, нет внешнего ключа.

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'
  }
...