phpcr/phpcr-migrations-bundle

PHPCR migrations bundle

Maintainers

👁 dbu
👁 dantleech

Package info

github.com/phpcr/phpcr-migrations-bundle

pkg:composer/phpcr/phpcr-migrations-bundle

Statistics

Installs: 308 526

Dependents: 8

Suggesters: 0

Stars: 9

Open Issues: 0

1.6.0 2024-04-05 15:47 UTC

Requires

Requires (Dev)

Suggests

None

Provides

None

Conflicts

None

Replaces

None

MIT d59c4a98ba9b6a65786e21ca302371721c94473f

  • Daniel Leech <daniel.woop@dantleech.com>
  • David Buchmann <mail.woop@davidbu.ch>

This package is auto-updated.

Last update: 2026-06-05 20:49:01 UTC


README

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