PHPackages                             maxim-oleinik/blade-migrations - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. maxim-oleinik/blade-migrations

ActiveLibrary[Database &amp; ORM](/categories/database)

maxim-oleinik/blade-migrations
==============================

Raw SQL database migration tool for PHP apps

0.2.4(3y ago)02.3k↓68%2MITPHPPHP &gt;=7.0

Since Dec 4Pushed 3y ago1 watchersCompare

[ Source](https://github.com/maxim-oleinik/blade-migrations)[ Packagist](https://packagist.org/packages/maxim-oleinik/blade-migrations)[ RSS](/packages/maxim-oleinik-blade-migrations/feed)WikiDiscussions master Synced yesterday

READMEChangelog (2)Dependencies (4)Versions (8)Used By (2)

Blade/Migrations
================

[](#blademigrations)

[rus](./README.rus.md) / [![Latest Stable Version](https://camo.githubusercontent.com/e6800bc60924e599cfa456b26b47bbc0cc27954ab9f346f2a9406fcd1e7a683d/68747470733a2f2f706f7365722e707567782e6f72672f6d6178696d2d6f6c65696e696b2f626c6164652d6d6967726174696f6e732f762f737461626c65)](https://packagist.org/packages/maxim-oleinik/blade-migrations)[![Total Downloads](https://camo.githubusercontent.com/b7680da718eb92c8c2c505bc050db02af2a172b589b7a80ac7b54b88759ed305/68747470733a2f2f706f7365722e707567782e6f72672f6d6178696d2d6f6c65696e696b2f626c6164652d6d6967726174696f6e732f642f746f74616c2e737667)](https://packagist.org/packages/maxim-oleinik/blade-migrations)[![License](https://camo.githubusercontent.com/a96061a9e94734214d947d01d650db39cc9f2cb0ef88d23aa4fc3ea8e83b683f/68747470733a2f2f706f7365722e707567782e6f72672f6d6178696d2d6f6c65696e696b2f626c6164652d6d6967726174696f6e732f6c6963656e73652e737667)](https://packagist.org/packages/maxim-oleinik/blade-migrations)

This library provides Database structure manipulation commands, see implementations:

- Symfony/Console -
- Laravel/Artisan -

Features
--------

[](#features)

- **Using raw SQL queries**
    - you can use all the capabilities of your database to describe the structure and changes
    - easy work with procedures and functions
    - safe data migrations (INSERT/UPDATE)
    - IDE native syntax support
- **Running migrations within a transaction** with automatic rollback in case of an error (if your database supports it, PostgreSQL for example)
- **Dynamic output running the SQL-queries**
- **Automatic rollback** after switching the branch (for reviewing, testing, demo, building at permanent/staging database)
- **Auto-update the migration after editing** (version change in the name of the migration file)
- **Apply with rollback testing** - `UD-DOWN-UP`
- **Rollback or Reload any selected migration**

Syntax
------

[](#syntax)

- `--TRANSACTION` - if specified, the migration will be launched within a transaction
- Instructions are separated by `--UP` and` --DOWN` tags.
- The SQL queries are separated by `";"` (the last character at the end of the line)

```
--TRANSACTION
--UP
ALTER TABLE authors ADD COLUMN code INT;
ALTER TABLE posts   ADD COLUMN slug TEXT;

--DOWN
ALTER TABLE authors DROP COLUMN code;
ALTER TABLE posts   DROP COLUMN slug;

```

**If you need to change the delimiter** (when in SQL you have to use `";"`)

```
--SEPARATOR=@
--UP
    ... some sql ...@
    ... some sql ...@

--DOWN
    ... some sql ...@
    ... some sql ...@

```

Install
-------

[](#install)

1. Composer

    ```
        composer require maxim-oleinik/blade-migrations

    ```
2. Implement `\Blade\Database\DbConnectionInterface` to connect with your database, see
3. Setting up

    ```
        $conn      = new MyDbConnection; // implements \Blade\Database\DbConnectionInterface
        $dbAdapter = new \Blade\Database\DbAdapter($conn);
        $repoDb    = new \Blade\Migrations\Repository\DbRepository($migrationTableName = 'migrations', $dbAdapter);
        $repoFile  = new \Blade\Migrations\Repository\FileRepository($migrationsDir = __DIR__ . '/migrations');
        $service   = new \Blade\Migrations\MigrationService($repoFile, $repoDb);

    ```

Commands
--------

[](#commands)

### Status - `\Blade\Migrations\Operation\StatusOperation`

[](#status---blademigrationsoperationstatusoperation)

```
    $op = new \Blade\Migrations\Operation\StatusOperation($service);
    $data = $op->getData();

```

Returns an array with current migrations state

```
 [
      [
          CODE,
          ID,
          DATE,
          NAME,
      ],
 ]

```

Where CODE is:

- **Y** - applied migration
- **D** - have to rollback (no this migration in the current branch/revision)
- **A** - not applied yet, next to be run

### Migrate - `\Blade\Migrations\Operation\MigrateOperation`

[](#migrate---blademigrationsoperationmigrateoperation)

```
    $op = new \Blade\Migrations\Operation\MigrateOperation($service);

    // Set logger for output
    $op->setLogger(\Psr\Log\LoggerInterface $logger);

    $op->setAuto(bool); // Auto-migrate all - rollback all D-migrations and appply all А-migrations
    $op->setForce(bool); // Apply the migration without a prompt
    $op->setTestRollback(bool); // rollback testing: UP-DOWN-UP

    /**
     * @param $confirmationCallback - Function, which asks for a prompt and returns true/false
     * @param $migrationName - Concrete migration name
     */
    $op->run(callable $confirmationCallback($migrationTitle), $migrationName = null);

```

### Rollback - `\Blade\Migrations\Operation\RollbackOperation`

[](#rollback---blademigrationsoperationrollbackoperation)

```
    $op = new \Blade\Migrations\Operation\RollbackOperation($service);

    // Set logger for output
    $op->setLogger(\Psr\Log\LoggerInterface $logger);

    $op->setForce(bool);

    /**
     * @param $confirmationCallback - Function, which asks for a prompt and returns true/false
     * @param $migrationId - Database migration ID
     * @param $loadFromFile - Rollback migration with commands taken from migration file, not from DB (if saved version contains error)
     */
    $op->run(callable $confirmationCallback($migrationTitle), $migrationId = null, $loadFromFile = false);

```

### Make migration file - `\Blade\Migrations\Operation\MakeOperation`

[](#make-migration-file---blademigrationsoperationmakeoperation)

```
    $op = new \Blade\Migrations\Operation\MakeOperation($repoFile)
    $op->run($migrationFileName);

```

### Install - `\Blade\Migrations\Repository\DbRepository`

[](#install---blademigrationsrepositorydbrepository)

Create migration table

```
    $repoDb->install();

```

###  Health Score

28

—

LowBetter than 54% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity17

Limited adoption so far

Community11

Small or concentrated contributor base

Maturity53

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~272 days

Recently: every ~332 days

Total

7

Last Release

1444d ago

PHP version history (2 changes)0.1.1PHP &gt;=7.0

0.2.0PHP 7.\*

### Community

Maintainers

![](https://www.gravatar.com/avatar/df55f28e06f2a06012eaea10010c8b14fda8ce1fa04e66a548def287d925a798?d=identicon)[maxim.oleinik](/maintainers/maxim.oleinik)

---

Top Contributors

[![maxim-oleinik](https://avatars.githubusercontent.com/u/75860?v=4)](https://github.com/maxim-oleinik "maxim-oleinik (85 commits)")

---

Tags

databasemigrationsdbdatabase migrations

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/maxim-oleinik-blade-migrations/health.svg)

```
[![Health](https://phpackages.com/badges/maxim-oleinik-blade-migrations/health.svg)](https://phpackages.com/packages/maxim-oleinik-blade-migrations)
```

###  Alternatives

[robmorgan/phinx

Phinx makes it ridiculously easy to manage the database migrations for your PHP app.

4.5k46.2M405](/packages/robmorgan-phinx)[masom/lhm

Large Hadron Migrator for phinx

309.3k](/packages/masom-lhm)[dbpatch/dbpatch

DbPatch is a commandline utility to manage/track (my)sql/php patch files.

4261.9k](/packages/dbpatch-dbpatch)[tommyknocker/pdo-database-class

Framework-agnostic PHP database library with unified API for MySQL, MariaDB, PostgreSQL, SQLite, MSSQL, and Oracle. Query Builder, caching, sharding, window functions, CTEs, JSON, migrations, ActiveRecord, CLI tools, AI-powered analysis. Zero external dependencies.

845.7k](/packages/tommyknocker-pdo-database-class)[bartlett/php-compatinfo-db

Reference Database of all functions, constants, classes, interfaces on PHP standard distribution and about 110 extensions

1183.0k1](/packages/bartlett-php-compatinfo-db)[kohkimakimoto/lib-migration

LibMigration is a minimum database migration library and framework for MySQL.

1233.6k](/packages/kohkimakimoto-lib-migration)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
