/** * @param Migration $migration * @return fluent */ public function down(Migration $migration) { $version = $migration->getVersion(); $sql = <<<SQL SELECT * FROM migrations.migrations WHERE version = :version ORDER BY version SQL; $version_row = $this->yo_pdo->query($sql, ['version' => $version])->fetch(); if (!$version_row) { throw new Exception("Migration '{$version}' cannot be rolled back because it is not currently applied."); } $migration_reflection = new ReflectionClass(get_class($migration)); $this->yo_pdo->insert('migrations.rollbacks', ['version' => $version_row['version'], 'migrated_at' => $version_row['migrated_at'], 'migration_hash' => $version_row['migration_hash'], 'rollback_hash' => hash_file('sha256', $migration_reflection->getFileName())]); $this->yo_pdo->delete('migrations.migrations', 'version = :version', ['version' => $migration->getVersion()]); return $this; }