diff --git a/src/Migrations/Mixins/Migrate.js b/src/Migrations/Mixins/Migrate.js index 14377556..f7320e61 100644 --- a/src/Migrations/Mixins/Migrate.js +++ b/src/Migrations/Mixins/Migrate.js @@ -52,8 +52,7 @@ Migrate._migrateClass = function (schemaInstance, method) { Migrate._executeSchema = function (schemaInstance, direction) { schemaInstance[direction]() _.each(schemaInstance.store, (schemas, method) => { - const connection = this.database.connection(schemaInstance.constructor.connection) - this._callSchemaActions(schemas, connection.schema, method) + this._callSchemaActions(schemas, schemaInstance.constructor.connection, method) }) } @@ -64,13 +63,14 @@ Migrate._executeSchema = function (schemaInstance, direction) { * @method _callSchemaActions * * @param {Array} actions - * @param {Object} builder + * @param {Object} connection * @param {String} method * * @private */ -Migrate._callSchemaActions = function (actions, builder, method) { +Migrate._callSchemaActions = function (actions, connection, method) { _.each(actions, (defination) => { + const builder = this.database.connection(connection).schema const migration = builder[method](defination.key, this._schemaCallback(defination.callback)) this.migrations.push(migration) }) diff --git a/test/unit/migrations.spec.js b/test/unit/migrations.spec.js index 5fa9c18d..a8f30301 100644 --- a/test/unit/migrations.spec.js +++ b/test/unit/migrations.spec.js @@ -493,4 +493,61 @@ describe('Migrations', function () { yield runner.database.schema.dropTable('users') yield runner.database.schema.dropTable('adonis_migrations') }) + + it('should be able to run multiple commands inside a single up method', function * () { + const runner = new Migrations(Database, Config) + class Users extends Schema { + up () { + this.create('users', (table) => { + table.increments() + }) + + this.create('accounts', (table) => { + table.increments() + }) + } + } + const migrations = {'2015-01-20': Users} + yield runner.up(migrations) + const usersInfo = yield runner.database.table('users').columnInfo() + const accountsInfo = yield runner.database.table('accounts').columnInfo() + expect(usersInfo.id).to.be.an('object') + expect(accountsInfo.id).to.be.an('object') + yield runner.database.schema.dropTable('users') + yield runner.database.schema.dropTable('accounts') + yield runner.database.schema.dropTable('adonis_migrations') + }) + + it('should be able to run multiple commands inside a single down method', function * () { + const runner = new Migrations(Database, Config) + class Users extends Schema { + up () { + this.create('users', (table) => { + table.increments() + }) + + this.create('accounts', (table) => { + table.increments() + }) + } + + down () { + this.drop('users') + this.drop('accounts') + } + } + const migrations = {'2015-01-20': Users} + yield runner.up(migrations) + const usersInfo = yield runner.database.table('users').columnInfo() + const accountsInfo = yield runner.database.table('accounts').columnInfo() + expect(usersInfo.id).to.be.an('object') + expect(accountsInfo.id).to.be.an('object') + const runner1 = new Migrations(Database, Config) + yield runner1.down(migrations) + const usersTable = yield runner1.database.table('users').columnInfo() + const accountsTable = yield runner1.database.table('accounts').columnInfo() + expect(usersTable).deep.equal({}) + expect(accountsTable).deep.equal({}) + yield runner.database.schema.dropTable('adonis_migrations') + }) })