Coder Social home page Coder Social logo

doctrinemigrationsserviceprovider's Introduction

Doctrine Migrations Service Provider

Provides Doctrine Migrations commands in Silex applications by extending console with additional commands. Those commands are wrappers for base Doctrine Migrations commands and for proper working require console application to be instance of console provided by Codito Console Service Provider, because commands need access to some services and/or config options to properly resolve migrations configuration.

Requirements

  • PHP >= 5.4 because of traits and short array syntax.

Installation

Add entries to composer.json:

"require": {
    "codito/doctrine-migrations-service-provider": "~2.0"
}

Configuration

In order to use Doctrine Migrations commands in your console, you have to configure few things:

  • DoctrineServiceProvider (one of Silex's default providers)
  • ConsoleServiceProvider from here
  • DoctrineOrmServiceProvider from here, optionally (required only for migrations:diff command)
  • DoctrineMigrationsServiceProvider itself

DoctrineMigrationsServiceProvider supports configuration both for single and multiple connections/entity managers.

Example config

Register DoctrineServiceProvider (can be also configured with db.options, then it will be default connection)

$app->register(new DoctrineServiceProvider(), array(
    'dbs.options' => array(
        'some_connection' => array(
            'driver'   => 'pdo_mysql',
            'dbname'   => 'silex',
            'host'     => 'localhost',
            'user'     => 'root',
            'password' => null,
            'port'     => null,
        )
    )
));

Register ConsoleServiceProvider

$app->register(new \Codito\Silex\Provider\ConsoleServiceProvider(), array(
    'console.name'              => 'Silex App',
    'console.version'           => '1.0.0',
));

Register DoctrineMigrationsServiceProvider:

$app->register(new \Codito\Silex\DoctrineMigrationsService\Provider\DoctrineMigrationsServiceProvider(), array(
    'db.migrations.options' => array(
        'some_connection' => array(
            'dir_name' => realpath(__DIR__ . '/Application/Migrations'),
            'namespace' => 'Application\\Migrations',
            'table_name' => 'migration_versions',
            'name' => 'Application Migrations',
        )
    )
));

Configuration of DoctrineMigrationsServiceProvider is always under db.migrations.options, regardless to single or multiple configs. Those configs are related to db.options/dbs.options and names must match in order to work correctly.

Optionally, if you need migrations:diff command, you may want to register

$app->register(new Dflydev\Silex\Provider\DoctrineOrm\DoctrineOrmServiceProvider(), array(
    'orm.proxies_dir' => __DIR__ . '/../var/orm',
    'orm.ems.options' => array(
        'some_entity_manager' => array(
            'connection' => 'some_connection', // Important if you have custom connection name
            'mappings' => array(
                // Using actual filesystem paths
                array(
                    'type' => 'annotation',
                    'namespace' => 'Application\Entity',
                    'path' => __DIR__ . '/Application/Entity',
                    'use_simple_annotation_reader' => false // Support for "use Doctrine\ORM\Mapping AS ORM" -> "@ORM\Entity"
                ),
            ),
        )
    ),
));

If you want to use complex annotations, like @ORM\Entity, you have to set use_simple_annotation_reader to false like above. However it requires to configure AnnotationRegistry on your own, like:

$loader = require_once __DIR__.'/../vendor/autoload.php';
\Doctrine\Common\Annotations\AnnotationRegistry::registerLoader(array($loader, 'loadClass'));

It should be done in console executable file.

Usage

Just run php bin/console (or wherever you have console) and commands list will appear. Each command has own help, to view it just type php bin/console some:command:from:your:commands:list --help.

If you did everything properly, complete migration commands would look like:

doctrine
  doctrine:migrations:diff       Generate a migration by comparing your current database to your mapping information.
  doctrine:migrations:execute    Execute a single migration version up or down manually.
  doctrine:migrations:generate   Generate a blank migration class.
  doctrine:migrations:latest     Outputs the latest version number
  doctrine:migrations:migrate    Execute a migration to a specified version or the latest available version.
  doctrine:migrations:status     View the status of a set of migrations.
  doctrine:migrations:version    Manually add and delete migration versions from the version table.

Container aware migrations

Since v2.1 there is possibility to use migrations with auto-injected Pimple container (Silex app). If you need cointainer inside migrations, just implement Codito\Silex\DoctrineMigrationsService\Migration\ContainerAwareMigration interface or extend Codito\Silex\DoctrineMigrationsService\Migration\AbstractContainerAwareMigration. This is helpful if you have multiple connections and migration for one connection requires data from other connection or if some service must be called in order to execute migration.

Please notice

Depending on your config you have to (or don't) pass --db/--em param to command. --db is used for most of commands, --em is only for doctrine:migrations:diff and it will automatically set --db option based on connection attribute in entity manager's config.

doctrinemigrationsserviceprovider's People

Contributors

wirone avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

mattin

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.