在种子文件中模型创建或批量创建promise

时间:2018-09-26 05:13:05

标签: javascript node.js sequelize.js seed

我有一些应许链来添加数据。如果我在JavaScript文件中“正常”使用它,则从Node.js开始或以其他方式调用它,它可以工作(或多或少-不同的问题)。

但是,如果我想在带有sequelize-cli的sequelize种子文件中使用它(sequelize db:seed:all),promise将不起作用。好的,在.catch链中遇到了一个错误,但是.then无法正常工作...

promise字段都是未定义的...

我知道我可以使用bulkInsert,但是如果“必须”使用原始SQL,为什么我要使用ORM,特别是如果我在指向uuid的表之间有链接时?

我定义了模型,有一个“正常”迁移文件,并希望“开始”数据带有种子。我需要单独使用create / bulkCreate promises吗?

我是否错过了文档中的某些内容?

1 个答案:

答案 0 :(得分:0)

我自己尝试了很多,并找到了答案: Sequelize dynamic seeding

需要在模型上固定关联:

User.associate = function(models) {
  User.belongsToMany(
    models.Role, {
      through: 'user_role',
    }
  );
};

Role.associate = function(models) {
  Role.belongsToMany(
    models.User, {
      through: 'user_role',
    }
  );
};

和m:n表需要此:

....
.then(() => {
  queryInterface.createTable('user_role', {
    userUuid: {
      type: Sequelize.UUIDV4,
      references: {
        model: 'User',
        key: 'uuid',
      },
      allowNull: false,
    },
    roleUuid: {
      type: Sequelize.UUIDV4,
      references: {
        model: 'Role',
        key: 'uuid',
      },
      allowNull: false,
    },
    createdAt: { allowNull: false, type: Sequelize.DATE },
    updatedAt: { allowNull: false, type: Sequelize.DATE },
  });
}).then(() => {
  return queryInterface.addConstraint(
    'user_role',
    ['userUuid', 'roleUuid'], {
      unique: true,
      type: 'primary key',
      name: 'userrole_pkey',
    }
  );
});

将字段重命名为类似于sequelize生成的字段