PHPackages                             semisedlak/migratte - 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. semisedlak/migratte

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

semisedlak/migratte
===================

Migratte is a simple database migration tool for PHP.

0.6.0(2y ago)135.3k↓39.3%MITPHPPHP &gt;=7.4

Since May 30Pushed 2y ago1 watchersCompare

[ Source](https://github.com/semisedlak/migratte)[ Packagist](https://packagist.org/packages/semisedlak/migratte)[ RSS](/packages/semisedlak-migratte/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependencies (3)Versions (10)Used By (0)

Migratte
========

[](#migratte)

- [How it works](#how-it-works)
- [Migration anatomy](#migration-anatomy)
- [Configuration](#configuration)
- [Executable file](#executable-file)
- [Commands](#commands)
    - [`migratte:generate`](#migrattegenerate)
    - [`migratte:commit`](#migrattecommit)
    - [`migratte:rollback`](#migratterollback)
    - [`migratte:status`](#migrattestatus)
    - [`migratte:info`](#migratteinfo)
- [Are you using Nette Framework?](#are-you-using-nette-framework)
- [Changelog](#changelog)
    - [0.4.0](#040)

Migratte is simple SQL migrations management standalone CLI app, framework-agnostic. It is inspired by [Phinx](https://phinx.org/), but it is much simpler, and it doesn't require CakePHP framework to be installed.

You can install it using composer:

```
$ composer require semisedlak/migratte
```

How it works
------------

[](#how-it-works)

It is controlled by ([Symfony Console](https://github.com/symfony/console)) CLI commands for:

1. [generate](#migrattegenerate) new migration
2. [commit](#migrattecommit) migration
3. [rollback](#migratterollback) migration
4. showing migrations [status](#migrattestatus)
5. showing configuration [info](#migratteinfo)

Migration anatomy
-----------------

[](#migration-anatomy)

Migrations are simple [PHP files](#migration-anatomy) keeping plain SQL queries. If plain SQL so why PHP files then? Answer is simple. For keeping ["up"](#example-migration) (for [commit](#migrattecommit)) and ["down"](#example-migration) (for [rollback](#migratterollback)) SQL queries with additional metadata all together.

> 💡 Migratte doesn't provide (yet) rich migrations management. It is just a simple tool for executing your SQL queries and it is up to you to write them. You can use any SQL query you want.
>
> You can still use [Phinx](https://phinx.org/) with [CakePHP Migrations](https://book.cakephp.org/3.0/en/migrations.html) for migrations management. I recommend [Adminer](https://www.adminer.org/) for database management.

Specific migration class extends from basic migration class. It contains timestamp in file name and class name witch should not be modified.

Migration file that doesn't contain `down()` method is "breakpoint", that means rollback cannot be performed. BUT! There is an option `--force` to perform rollback with this kind of migration.

This tool creates it's "memory" in same database as migrations target. It uses [dibi database layer](https://dibiphp.com/) for connection and queries executions.

You can use it with:

- MySQL database
- PostgreSQL database
- SQLite database

Configuration
-------------

[](#configuration)

You can override this default configuration options:

```
'timezone'        => 'UTC',
'migrationsDir'   => "$workingDir/database/migrations",
'migrationsTable' => [
  'name'        => 'migrations',
  'primaryKey'  => 'id',
  'fileName'    => 'filename',
  'groupNo'     => 'group',
  'committedAt' => 'committed_at',
],
'connection'      => [
  'driver'   => 'sqlite', // mysqli or postgre
  'database' => "$workingDir/database/migratte.s3db",
],
```

providing options array as first argument of `Application::boot()` method from executable file. You can read how to set up connection in [dibi documentation](https://dibiphp.com/).

Executable file
---------------

[](#executable-file)

Create a file `bin/migrations` in the root dir of your project with following content:

```
#!/usr/bin/env php
