src/Db/Migration.php
public function down()
    {
        $transaction = $this->db->createTransaction();
        return $transaction->begin()->thenLazy(
            function($connection) {
                $promise = $this->safeDown($connection);
                return is_array($promise) ? allInOrder($promise) : $promise;
            }
        )->thenLazy(
            function() use ($transaction) {
                return $transaction->commit();
            },
            function($error) use ($transaction) {
                $this->printException($error);
                return $transaction->rollBack()->then(
                    function() use ($error) { throw $error; },
                    function($e) { throw $e; }
                );
            }
        );
    }
public function down()
    {
        $transaction = $this->db->createTransaction();
        return $transaction->begin()->thenLazy(
            function($connection) {
                $promise = $this->safeDown($connection);
                return is_array($promise) ? allInOrder($promise) : $promise;
            }
        )->thenLazy(
            function() use ($transaction) {
                return $transaction->commit();
            },
            function($error) use ($transaction) {
                $this->printException($error);
                return $transaction->rollBack()->then(
                    function() use ($error) { throw $error; },
                    function($e) { throw $e; }
                );
            }
        );
    }
This method contains the logic to be executed when removing this migration.
The default implementation throws an exception indicating the migration cannot be removed.
Child classes may override this method if the corresponding migrations can be removed.
@return ExtendedPromiseInterface
Resolved promise mean the migration succeeds and rejected - not.