我可以在迁移脚本中使用sequelize模型吗?

时间:2016-08-17 13:43:07

标签: javascript node.js sequelize.js

我想在迁移脚本中使用sequelize模型。有可能,如果是的话,请你提供一个例子吗?感谢

我创建了一个表,帐户,在使用迁移脚本创建后,我想迭代所有未关联的用户(旧用户)(〜还没有帐户)并为这些旧用户创建一个新帐户。为此,我想使用sequelize模型来编写:User.findAll({ include: [Account], where: { Account: null } })我明白这有点太异国情调了,我可以写一个续集声明来创建这些帐户,但是......:D

当我尝试要求sequelize模型时,迁移始终会引发[SyntaxError: Unexpected token =]错误。请注意,在脚本创建表(帐户)后,我只需要模型(帐户)。我的模型文件中没有语法错误,因为否则它会起作用,但是当我尝试在迁移脚本中使用它时,它并没有。

2 个答案:

答案 0 :(得分:0)

只是遇到了这个问题,只需要模型并使用它们即可。

'use strict';
const { User, Account } = require('../models'); // Assuming migrations is next to models

module.exports = {
  up: async (queryInterface, Sequelize) => {
    // Make the database migrations
    await queryInterface.createTable('Accounts', .......)
    await queryInterface.addColumn('Users', 'AccountId', {
      type: Sequelize.INTEGER,
      references: { model: 'Accounts', key: 'id' }
      // ... more stuff here
    })

    // Fill up data
    const usersWithoutAccounts = await User.findAll({ where: {AccountId: null}})

    await Promise.all(usersWithoutAccounts.map(async user => {
      const account = await Account.create({ props })
      await user.update({ AccountId: account.id })
    }))
  },

  down: async (queryInterface, Sequelize) => {
    // ... undo changes
  }
};

答案 1 :(得分:0)

在迁移中使用模型不是一个好主意,因为模型架构可能比执行迁移时数据库的状态(例如,在以后迁移中添加的字段)更高级,这将导致查询失败。

我建议在迁移中使用 queryInterface.sequelize.query