Pular para o conteúdo principal

API Reference

Migration Class​

The main class for handling database migrations.

Constructor​

public function __construct(
UriInterface $uri,
string $folder,
bool $requiredBase = true,
string $migrationTable = 'migration_version'
)

Parameters:

  • $uri: Database connection URI
  • $folder: Path to migration scripts
  • $requiredBase: Whether base.sql is required
  • $migrationTable: Name of migration tracking table

Core Methods​

Version Control​

// Create version tracking table
public function createVersion(): void

// Check if database is versioned
public function isDatabaseVersioned(): bool

// Get current version and status
// Returns: ['version' => int, 'status' => string]
public function getCurrentVersion(): array

// Update version table structure
public function updateTableVersion(): void

Migration Operations​

// Restore database and run all migrations
public function reset(?int $upVersion = null): void

// Migrate up to specific version
public function up(?int $version = null, bool $force = false): void

// Migrate down to specific version
public function down(?int $version = null, bool $force = false): void

// Smart migration up or down to target version
public function update(?int $version = null, bool $force = false): void

Configuration​

// Enable/disable transaction support
public function withTransactionEnabled(bool $enabled = true): static

// Add progress callback
public function addCallbackProgress(callable $callable): void

// Register database handler
public static function registerDatabase(string $class): void

Database Operations​

// Get database driver instance
public function getDbDriver(): DbDriverInterface

// Get database executor instance (run queries: execute, getScalar, getIterator)
public function getExecutor(): DatabaseExecutor

// Get database command instance
public function getDbCommand(): DatabaseInterface

// Create the database if it does not exist (do not use in production)
public function prepareEnvironment(): void

// Name of the migration tracking table
public function getMigrationTable(): string

Progress Callback​

The progress callback receives three parameters:

function (
string $action, // Current action: 'reset' or 'migrate'
int $currentVersion, // Current version number
array $fileInfo // File information array
)

The $fileInfo array contains:

[
'file' => string, // Full path to migration file
'description' => string, // Migration description
'exists' => bool, // Whether file exists
'checksum' => ?string, // SHA1 hash of file contents (null if the file does not exist)
'content' => ?string // File contents (null if the file does not exist)
]

Database Handlers​

Custom database handlers must implement DatabaseInterface:

interface DatabaseInterface
{
public static function schema(); // URI scheme(s) handled: string or string[]
public static function prepareEnvironment(UriInterface $uri);
public function createDatabase(): void;
public function dropDatabase(): void;
public function getVersion(): array; // ['version' => ..., 'status' => ...]
public function updateVersionTable(): void;
public function executeSql(string $sql): void;
public function setVersion(int $version, MigrationStatus $status): void;
public function createVersion(): void;
public function isDatabaseVersioned(): bool;
public function getDbDriver(): DbDriverInterface;
public function getExecutor(): DatabaseExecutor;
public function getMigrationTable(): string;
public function supportsTransaction(): bool;
}

Extending AbstractDatabase provides most of them.

Built-in Handlers​

  • MySqlDatabase: MySQL/MariaDB (mysql://, mariadb://)
  • PgsqlDatabase: PostgreSQL (pgsql://, postgres://, postgresql://)
  • SqliteDatabase: SQLite (sqlite://)
  • DblibDatabase: Microsoft SQL Server (dblib://, sqlsrv://)

Examples​

Basic Migration​

$uri = new \ByJG\Util\Uri('mysql://user:pass@localhost/database');
\ByJG\DbMigration\Migration::registerDatabase(\ByJG\DbMigration\Database\MySqlDatabase::class);

$migration = new \ByJG\DbMigration\Migration($uri, '/migrations');
$migration->update();

With Progress Tracking​

$migration->addCallbackProgress(function ($action, $version, $fileInfo) {
echo sprintf(
"Executing %s to version %d: %s\n",
$action,
$version,
$fileInfo['description']
);
});

With Transaction Support​

Transaction Support

Transaction support is not available for MySQL as it doesn't support DDL commands inside transactions. The setting will be silently ignored for MySQL databases.

$migration
->withTransactionEnabled(true)
->update();

Custom Version Table​

$migration = new \ByJG\DbMigration\Migration(
$uri,
'/migrations',
true,
'custom_version_table'
);