A simple MySQL migration management tool in PHP, create and update databases automatically with a config json file without having to use inbuilt ORM functions.

1.5.0 2014-11-20 10:57 UTC



Due to the fact that Schematic was never truly fully completed with all the features I wanted it to have, I'm shelving it for the time being, if anyone would like to become the new active contributer let me know. However I've now moved on to Laravel as my main framework and Laravel migrations have now taken over from Schematic.

A database migrations tool, allows for easy database maintenance in a way that is easy to setup in a continuous integration environment.

Build Status Latest Stable Version Total Downloads Latest Unstable Version License Bitdeli Badge ###Install locally via Composer

    require: {
        "mysql/schematic": "1.*.*"

###Install it Globally

  • Run the following commands:

Download the PHAR file:

wget --no-check-certificate

Make the PHAR package executable

chmod +x schematic.phar

Move it to the user bin folder

mv schematic.phar /usr/local/bin/schematic

Then use Schematic


Schematic will now be available globally for you!

###Schema format

Schema is defined in schema files, these must be stored in the schema folder in json files representing the table they are for, e.g. (Make sure that you create the schema folder in the root of your project)


The schema file contains all of the configuration of the database in order to create it or amend it, see an example below.

In the current version you need to pass a type and null through always, you pass the length in parenthesis on the type field.

Schematic uses all of the base MySQL values so you just need to put them into this file and they will work, if you spell something incorrectly, it will stop running and throw and exception.

###Example Schema

    name: Schematic
    version: 1.4.5
        name: schematic
        charset: utf8
        collation: utf8_general_ci
        engine: InnoDB
                    type: int(11)
                    'null': false
                    unsigned: true
                    autoIncrement: true
                    index: 'PRIMARY KEY'
                    type: int(24)
                    'null': false
                    unsigned: true
                    autoIncrement: false
                    type: varchar(128)
                    'null': false
                    unsigned: false
                    autoIncrement: false
                    rename: full_name
                    type: varchar(256)
                    'null': false
                    unsigned: false
                    autoIncrement: false
                    type: datetime
                    'null': false
                    unsigned: false
                    autoIncrement: false

Note that currently foreign keys are only added, but not removed, If created a new database with constraints, you must run the update twice to add the constraints.


schematic [options] command [arguments]


--help -h Display this help message.

--quiet -q Do not output any message.

--verbose -v|vv|vvv Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug

--version -V Display this application version.

--ansi Force ANSI output.

--no-ansi Disable ANSI output.

--no-interaction -n Do not ask any interactive question.

Available commands:

help Displays help for a command

list Lists commands


migrations:execute Executes the database migration based on the JSON schema files

migrations:generate Generates the database schema JSON files

migrations:mapping Generates the database schema based on an existing database

The script also creates a log of all of the database changes which are made.