You're building an application, and you need to share the database's structure with your team. After all, you want everyone to be up and running as soon as possible. What do you do? SQL dumps of table structures? You could... but that's so very primitive - and can be time consuming to import, too! More often than not, database migrations are the answer.
In this tutorial, we'll go through a framework-agnostic package for building and executing database migrations called Phinx.
Bootstrapping
First, let's install Phinx into the project with Composer:
composer require robmorgan/phinx
The Phinx binary will be installed into the vendor/bin
folder, as per Composer's default values. It can then be executed by running:
php vendor/bin/phinx
Phinx needs a phinx.yml
file from which to read the database configuration before it can do anything meaningful. To generate it, we run:
php vendor/bin/phinx init
Configurations
The generate file will look something like this:
paths:
migrations: %%PHINX_CONFIG_DIR%%/db/migrations
seeds: %%PHINX_CONFIG_DIR%%/db/seeds
environments:
default_migration_table: phinxlog
default_database: development
production:
adapter: mysql
host: localhost
name: production_db
user: root
pass: ''
port: 3306
charset: utf8
development:
adapter: mysql
host: localhost
name: development_db
user: root
pass: ''
port: 3306
charset: utf8
testing:
adapter: mysql
host: localhost
name: testing_db
user: root
pass: ''
port: 3306
charset: utf8
Phinx supports an arbitrary number of "databases", though these should be considered version of one database rather than several different ones. Sometimes, the need may arise to use a completely different database, however.
Such is the case, for example, with nofw, which in a previous version still uses Gatekeeper - a secure but clumsily developed user authorization package. Gatekeeper demands its own phinx.yml
file (with a custom migration path) and does not provide an option to change which one is used, while at the same time requiring its own user database. That throws a wrench into the whole "let's use Phinx in a project already using Gatekeeper" idea.
For cases like these, Phinx offers the -c
option which tells the launcher which phinx.yml
file to use. Note that Phinx supports json
and php
file formats, too, but we'll focus on the default yml
one here and create a separate file for our example database.
Continue reading %Phinx – the Migration Library You Never Knew You Needed%
by Bruno Skvorc via SitePoint
No comments:
Post a Comment