Skip to content

Symfony Bundle for integrating the PHPCR migrations library

License

Notifications You must be signed in to change notification settings

phpcr/phpcr-migrations-bundle

Folders and files

NameName
Last commit message
Last commit date

Latest commit

d59c4a9 · Apr 5, 2024

History

63 Commits
Apr 5, 2024
Apr 5, 2024
Apr 5, 2024
Mar 18, 2024
Mar 18, 2024
Apr 5, 2024
Apr 5, 2024
Apr 29, 2015
Mar 18, 2024
Apr 5, 2024
Mar 18, 2024

Repository files navigation

PHPCR Migrations Bundle

This library provides a Symfony integration for the PHPCR migrations library.

It has initially been created by Daniel Leech as dantleech/phpcr-migrations-bundle and was then donated to the PHPCR organization.

Configuration

Configure the path to your migrations:

# config/packages/phpcr-migrations.yaml
phpcr_migrations:
    paths: [%kernel.project_dir%/phpcr-migrations]

And the bundle will automatically pick up any migrations in the Resources/phpcr-migrations folder in any bundles registered in the kernel.

Creating migrations

First create two new migration files:

<?php
// phpcr-migrations/Version201501011200.php

use PHPCR\SessionInterface;
use PHPCR\Migrations\VersionInterface;

class Version201501011200 implements VersionInterface
{
    public function up(SessionInterface $session): void
    {
        $session->getRootNode()->addNode('hello');
    }

    public function down(SessionInterface $session): void
    {
        $session->getRootNode()->getNode('hello')->remove();
    }
}

and

<?php
// app/phpcr-migrations/Version201501011212.php

use PHPCR\SessionInterface;
use PHPCR\Migrations\VersionInterface;

class Version201501011212 implements VersionInterface
{
    public function up(SessionInterface $session): void
    {
        $session->getNode('/hello')->addNode('world');
    }

    public function down(SessionInterface $session): void
    {
        $session->getNode('/hello')->getNode('world')->remove();
    }
}

Migration status

Note that migration MUST be named as follows: VersionYYYMMDDHHSS. If they are not so-named, they will not be detected. The timestamp SHOULD be the current date (in this example 2015/01/01 12:00).

Now execute the phpcr:migrations:status command:

$ php app/console phpcr:migrations:status
+--+---------------+------------------+----------+----------------------------------------------+
|  | Version       | Date             | Migrated | Path                                         |
+--+---------------+------------------+----------+----------------------------------------------+
|  | 201501011200 | 2015-01-01 12:00 | NO       | app/phpcr-migrations/Version201501011200.php |
|  | 201501011212 | 2015-01-01 12:12 | NO       | app/phpcr-migrations/Version201501011212.php |
+--+---------------+------------------+----------+----------------------------------------------+
No migrations have been executed

Executing migrations

Now we can run the migrations:

$ php app/console phpcr:migrations:migrate
Upgrading 2 version(s):
 + [1/2]: 201501011200
 + [2/2]: 201501011212

This should run the two migrations.

Reverting

You can now revert back to the first version as follows:

$ php app/console phpcr:migrations:migrate 201501011200
Reverting 1 version(s):
 - [1/4]: V201501011212

Actions

In addition to specifying versions you can specify actions:

$ php app/console phpcr:migrations:migrate up
Upgrading 1 version(s):
 - [1/4]: V201501011212

Actions are:

  • up: Upgrade one version
  • down: Revert one version
  • top: Migrate to the latest version
  • bottom: Revert all migrations

About

Symfony Bundle for integrating the PHPCR migrations library

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages