Download the PHP package okvpn/migration-bundle without Composer
On this page you can find all versions of the php package okvpn/migration-bundle. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download okvpn/migration-bundle
More information about okvpn/migration-bundle
Files in okvpn/migration-bundle
Package migration-bundle
Short Description Database Schema migrations using Doctrine
License MIT
Homepage https://github.com/okvpn/migration-bundle
Informations about the package migration-bundle
OkvpnMigrationBundle
Database structure and data manipulator.
Intro
OkvpnMigrationBundle allow write database migrations using database agnostic PHP code, which uses the external doctrine/dbal library Doctrine Schema Manager.
Features
- Write database migrations using database agnostic PHP code.
- Locate migrations inside each bundle and supports the multiple locations.
- Compatible with different versions of Doctrine and Symfony 3-4.
- Extensions for database structure migrations.
- Events before and after migrations.
Installations
Install using composer:
If you don't use Symfony Flex, you must enable the bundle manually in the application:
Symfony 4 config/bundles.php
Symfony 2 - 3, enable the bundle in app/AppKernel.php
Database structure migrations
Each bundle can have migration files that allow to update database schema.
Migration files should be located in Migrations\Schema\version_number
folder. A version number must be an PHP-standardized version number string, but with some limitations. This string must not contain "." and "+" characters as a version parts separator. More info about PHP-standardized version number string can be found in PHP manual.
Each migration class must implement Migration interface and must implement up
method. This method receives a current database structure in schema
parameter and queries
parameter which can be used to add additional queries.
With schema
parameter, you can create or update database structure without fear of compatibility between database engines.
If you want to execute additional SQL queries before or after applying a schema modification, you can use queries
parameter. This parameter represents a MigrationQuery interface. There are several ready to use implementations of this interface:
- SqlMigrationQuery - represents one or more SQL queries
- ParametrizedSqlMigrationQuery - similar to the previous class, but each query can have own parameters.
If you need to create own implementation of ParametrizedMigrationQuery class as a base class for your migration query.
If you have several migration classes within the same version and you need to make sure that they will be executed in a specified order you can use OrderedMigrationInterface interface.
Example of migration file:
Each bundle can have an installation file as well. This migration file replaces running multiple migration files. Install migration class must implement Installation interface and must implement up
and getMigrationVersion
methods. The getMigrationVersion
method must return max migration version number that this installation file replaces.
During an install process (it means that you installs a system from a scratch), if install migration file was found, it will be loaded first and then migration files with versions greater then a version returned by getMigrationVersion
method will be loaded.
For example. We have v1_0
, v1_1
, v1_2
, v1_3
migrations. And additionally, we have install migration class. This class returns v1_2
as a migration version. So, during an install process the install migration file will be loaded and then only v1_3
migration file will be loaded. Migrations from v1_0
to v1_2
will not be loaded.
Example of install migration file:
To run migrations, there is okvpn:migration:load command. This command collects migration files from bundles, sorts them by version number and applies changes.
This command supports some additional options:
- force - Causes the generated by migrations SQL statements to be physically executed against your database;
- dry-run - Outputs list of migrations without apply them;
- show-queries - Outputs list of database queries for each migration file;
- bundles - A list of bundles to load data from. If option is not set, migrations will be taken from all bundles;
- exclude - A list of bundle names which migrations should be skipped.
Also there is okvpn:migration:dump command to help in creation installation files. This command outputs current database structure as a plain sql or as Doctrine\DBAL\Schema\Schema
queries.
This command supports some additional options:
- plain-sql - Out schema as plain sql queries
- bundle - Bundle name for which migration wll be generated
- migration-version - Migration version number. This option will set the value returned by
getMigrationVersion
method of generated installation file.
Good practice for bundle is to have installation file for current version and migration files for migrating from previous versions to current.
Next algorithm may be used for new versions of your bundle:
- Create new migration
- Apply it with okvpn:migration:load
- Generate fresh installation file with okvpn:migration:dump
- If required - add migration extensions calls to generated installation.
Extensions for database structure migrations
Sometime you cannot use standard Doctrine methods for database structure modification. For example Schema::renameTable
does not work because it drops existing table and then creates a new table. To help you to manage such case and allow to add some useful functionality to any migration a extensions mechanism was designed. The following example shows how RenameExtension can be used:
As you can see to use the RenameExtensionAwareInterface and setRenameExtension
method.
Also there is some additional useful interfaces you can use in your migration class:
ContainerAwareInterface
- provides an access to Symfony dependency container- DatabasePlatformAwareInterface - allows to write a database type independent migrations
- DbIdentifierNameGenerator class which can be used to generate names of indices, foreign key constraints and others.
Create own extensions for database structure migrations
To create your own extension you need too do the following simple steps:
-
Create an extension class in
YourBundle/Migration/Extension
directory. UsingYourBundle/Migration/Extension
directory is not mandatory, but highly recommended. For example: -
Create
*AwareInterface
in the same namespase. It is important that the interface name should be{ExtensionClass}AwareInterface
and set method should beset{ExtensionClass}({ExtensionClass} ${extensionName})
. For example: - Register an extension in dependency container. For example
If you need an access to the database platform or the name generator you extension class should implement NameGeneratorAwareInterface appropriately.
Also if you need to use other extension in your extension the extension class should just implement *AwareInterface
of the extension you need.
All versions of migration-bundle with dependencies
symfony/framework-bundle Version ~2.7|~3.0|~4.0
symfony/doctrine-bridge Version ~2.7|~3.0|~4.0
doctrine/dbal Version ^2.1
doctrine/orm Version ^2.1