Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
## 2.1.2 under development

- New #363: Add `migrate:mark` to move migration history to a version without executing migrations (@samdark)
- New #360, #366: Add support for additional named databases with separate migration history and `--db` option to select
database (@samdark, @vjik)
- New #360, #366, #371: Add support for additional named databases with separate migration history and `--db`
option to select database (@samdark, @vjik)
- Enh #255: Show friendly error on run `./vendor/bin/yii-db-migration` without configuration file (@KalimeroMK)

## 2.1.1 August 10, 2026
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ migrate:up Applies new migrations.

The create command allows defining fields for the table being created.

Use `--db=name` to select a [named database migration set](docs/guide/en/multiple-databases.md).
Use `--db=name` to select one of [multiple databases](docs/guide/en/multiple-databases.md).

## Documentation

Expand Down
8 changes: 4 additions & 4 deletions bin/yii-db-migration
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ use Yiisoft\Db\Migration\Command\MarkCommand;
use Yiisoft\Db\Migration\Command\NewCommand;
use Yiisoft\Db\Migration\Command\RedoCommand;
use Yiisoft\Db\Migration\Command\UpdateCommand;
use Yiisoft\Db\Migration\DatabaseSet;
use Yiisoft\Db\Migration\DatabaseSetRegistry;
use Yiisoft\Db\Migration\DatabaseConfig;
use Yiisoft\Db\Migration\DatabaseRegistry;
use Yiisoft\Db\Migration\Informer\ConsoleMigrationInformer;
use Yiisoft\Db\Migration\Migrator;
use Yiisoft\Db\Migration\Runner\DownRunner;
Expand Down Expand Up @@ -45,7 +45,7 @@ if (!file_exists($configFile)) {
* @psalm-var array{
* container: ContainerInterface|null,
* db: ConnectionInterface|null,
* databases?: array<string, DatabaseSet>,
* databases?: array<string, DatabaseConfig>,
* useTablePrefix: bool,
* historyTable: string,
* migrationNameLimit: int|null,
Expand Down Expand Up @@ -79,7 +79,7 @@ $migrationService->setNewMigrationPath($params['newMigrationPath']);
$migrationService->setSourceNamespaces($params['sourceNamespaces']);
$migrationService->setSourcePaths($params['sourcePaths']);

$databases = new DatabaseSetRegistry($injector, $migrationInformer, $params['databases'] ?? []);
$databases = new DatabaseRegistry($injector, $migrationInformer, $params['databases'] ?? []);

$application = new Application('Yii Database Migration Tool', '1.0.0');
$application->addCommands([
Expand Down
2 changes: 1 addition & 1 deletion bin/yii-db-migration.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
'db' => null,

/**
* Additional named databases (name => Yiisoft\Db\Migration\DatabaseSet instance).
* Additional named databases (name => Yiisoft\Db\Migration\DatabaseConfig instance).
* The "default" database is configured by the other options and can't be defined here.
* See docs/guide/en/multiple-databases.md.
*/
Expand Down
9 changes: 4 additions & 5 deletions config/di-console.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

declare(strict_types=1);

use Yiisoft\Db\Migration\DatabaseSet;
use Yiisoft\Db\Migration\DatabaseSetRegistry;
use Yiisoft\Db\Migration\DatabaseConfig;
use Yiisoft\Db\Migration\DatabaseRegistry;
use Yiisoft\Db\Migration\Informer\ConsoleMigrationInformer;
use Yiisoft\Db\Migration\Informer\MigrationInformerInterface;
use Yiisoft\Db\Migration\Service\MigrationService;
Expand All @@ -13,12 +13,11 @@
/** @var array $params */

return [
DatabaseSetRegistry::class => [
'class' => DatabaseSetRegistry::class,
DatabaseRegistry::class => [
'__construct()' => [
'databases' => array_map(
static fn(array $database): DynamicReference => DynamicReference::to([
'class' => DatabaseSet::class,
'class' => DatabaseConfig::class,
'__construct()' => ['db' => Reference::to($database['db'])] + $database,
]),
$params['yiisoft/db-migration']['databases'],
Expand Down
8 changes: 4 additions & 4 deletions docs/guide/en/multiple-databases.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# Multiple databases

If your application uses separate databases such as `maps` and `analytics`, you can organize their migrations
into isolated sets. Each set has its own migration directory and a separate migration history table in its database,
so migrations applied to one set do not affect the recorded status of migrations in another. Use `--db` to work with
one set, or apply migrations to all sets with a single command.
If your application uses separate databases such as `maps` and `analytics`, you can keep their migrations
isolated. Each database has its own migration directory and a separate migration history table, so migrations applied
to one database do not affect the recorded status of migrations in another. Use `--db` to work with one database,
or apply migrations to all databases with a single command.

## Configure your databases

Expand Down
6 changes: 3 additions & 3 deletions docs/guide/en/usage-standalone.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,16 +34,16 @@ each additional database in `databases`. The example below assumes you have alre
`$analyticsConnection` in the same way as `db`, as described in [With configuration file](#with-configuration-file).

```php
use Yiisoft\Db\Migration\DatabaseSet;
use Yiisoft\Db\Migration\DatabaseConfig;

return [
// ...
'databases' => [
'maps' => new DatabaseSet(
'maps' => new DatabaseConfig(
$mapsConnection,
newMigrationPath: __DIR__ . '/config/migrations/maps',
),
'analytics' => new DatabaseSet(
'analytics' => new DatabaseConfig(
$analyticsConnection,
newMigrationPath: __DIR__ . '/config/migrations/analytics',
),
Expand Down
21 changes: 11 additions & 10 deletions docs/guide/en/usage-with-symfony.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,10 @@ services:
Yiisoft\Db\Migration\:
resource: '../vendor/yiisoft/db-migration/src/'
exclude:
- '../vendor/yiisoft/db-migration/src/DatabaseSetRegistry.php'
- '../vendor/yiisoft/db-migration/src/DatabaseSet.php'
- '../vendor/yiisoft/db-migration/src/DatabaseContext.php'
- '../vendor/yiisoft/db-migration/src/DatabaseRegistry.php'
- '../vendor/yiisoft/db-migration/src/DatabaseConfig.php'
- '../vendor/yiisoft/db-migration/src/DatabaseSetup.php'
- '../vendor/yiisoft/db-migration/src/Command/Context/'

Yiisoft\Db\Migration\Informer\MigrationInformerInterface:
class: 'Yiisoft\Db\Migration\Informer\ConsoleMigrationInformer'
Expand Down Expand Up @@ -66,27 +67,27 @@ That's it. Now you can use `bin/console migrate:*` commands.
## Multiple databases

The `default` database is configured as described above: it uses the `ConnectionInterface` service and the
`MigrationService` configuration. Add a `DatabaseSet` service for each additional database and pass them to
`DatabaseSetRegistry`. The commands receive the registry through autowiring. The example below assumes that the
`app.db.maps` and `app.db.analytics` connection services already exist.
`MigrationService` configuration. Add a `DatabaseConfig` service for each additional database and pass them
to `DatabaseRegistry`. The commands receive the registry through autowiring. The example below assumes that
the `app.db.maps` and `app.db.analytics` connection services already exist.

```yaml
services:
# ...

app.migrations.maps:
class: Yiisoft\Db\Migration\DatabaseSet
class: Yiisoft\Db\Migration\DatabaseConfig
arguments:
$db: '@app.db.maps'
$newMigrationPath: '%kernel.project_dir%/config/migrations/maps'

app.migrations.analytics:
class: Yiisoft\Db\Migration\DatabaseSet
class: Yiisoft\Db\Migration\DatabaseConfig
arguments:
$db: '@app.db.analytics'
$newMigrationPath: '%kernel.project_dir%/config/migrations/analytics'

Yiisoft\Db\Migration\DatabaseSetRegistry:
Yiisoft\Db\Migration\DatabaseRegistry:
arguments:
$databases:
maps: '@app.migrations.maps'
Expand All @@ -95,7 +96,7 @@ services:

The name `default` is reserved and can't be used in the registry.

Select one set with `--db`, or apply all sets with `migrate:up`:
Select one database with `--db`, or apply migrations to all databases with `migrate:up`:

```shell
php bin/console migrate:create create_places --db=maps
Expand Down
6 changes: 3 additions & 3 deletions docs/guide/en/usage-with-yii-console.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,8 @@ a DI container service ID:
],
```

Each set is an array of `Yiisoft\Db\Migration\DatabaseSet` constructor arguments, where `db` is the ID of a connection
service. Define these connections in the DI container, for example, in `config/common/db.php`:
Each database configuration is an array of `Yiisoft\Db\Migration\DatabaseConfig` constructor arguments, where `db` is the ID of
a connection service. Define these connections in the DI container, for example, in `config/common/db.php`:

```php
use Yiisoft\Db\Sqlite\Connection as SqliteConnection;
Expand All @@ -96,7 +96,7 @@ return [

The name `default` is reserved and can't be used in `databases`.

Select one set with `--db`, or apply all sets with `migrate:up`:
Select one database with `--db`, or apply migrations to all databases with `migrate:up`:

```shell
./yii migrate:create create_places --db=maps
Expand Down
23 changes: 23 additions & 0 deletions src/Command/Context/CreateContext.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?php

declare(strict_types=1);

namespace Yiisoft\Db\Migration\Command\Context;

use Yiisoft\Db\Migration\Migrator;
use Yiisoft\Db\Migration\Service\Generate\CreateService;
use Yiisoft\Db\Migration\Service\MigrationService;

/**
* Services of the `migrate:create` command for a single database.
*
* @internal
*/
final class CreateContext
{
public function __construct(
public readonly Migrator $migrator,
public readonly MigrationService $migrationService,
public readonly CreateService $createService,
) {}
}
23 changes: 23 additions & 0 deletions src/Command/Context/DownContext.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?php

declare(strict_types=1);

namespace Yiisoft\Db\Migration\Command\Context;

use Yiisoft\Db\Migration\Migrator;
use Yiisoft\Db\Migration\Runner\DownRunner;
use Yiisoft\Db\Migration\Service\MigrationService;

/**
* Services of the `migrate:down` command for a single database.
*
* @internal
*/
final class DownContext
{
public function __construct(
public readonly Migrator $migrator,
public readonly MigrationService $migrationService,
public readonly DownRunner $downRunner,
) {}
}
21 changes: 21 additions & 0 deletions src/Command/Context/MigrationContext.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<?php

declare(strict_types=1);

namespace Yiisoft\Db\Migration\Command\Context;

use Yiisoft\Db\Migration\Migrator;
use Yiisoft\Db\Migration\Service\MigrationService;

/**
* Services of a command that works with migrations of a single database.
*
* @internal
*/
final class MigrationContext
{
public function __construct(
public readonly Migrator $migrator,
public readonly MigrationService $migrationService,
) {}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,23 @@

declare(strict_types=1);

namespace Yiisoft\Db\Migration;
namespace Yiisoft\Db\Migration\Command\Context;

use Yiisoft\Db\Migration\Migrator;
use Yiisoft\Db\Migration\Runner\DownRunner;
use Yiisoft\Db\Migration\Runner\UpdateRunner;
use Yiisoft\Db\Migration\Service\Generate\CreateService;
use Yiisoft\Db\Migration\Service\MigrationService;

/**
* Services for one execution against a named database set.
* Services of the `migrate:redo` command for a single database.
*
* @internal
*/
final class DatabaseContext
final class RedoContext
{
public function __construct(
public readonly Migrator $migrator,
public readonly MigrationService $migrationService,
public readonly CreateService $createService,
public readonly DownRunner $downRunner,
public readonly UpdateRunner $updateRunner,
) {}
Expand Down
23 changes: 23 additions & 0 deletions src/Command/Context/UpdateContext.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?php

declare(strict_types=1);

namespace Yiisoft\Db\Migration\Command\Context;

use Yiisoft\Db\Migration\Migrator;
use Yiisoft\Db\Migration\Runner\UpdateRunner;
use Yiisoft\Db\Migration\Service\MigrationService;

/**
* Services of the `migrate:up` command for a single database.
*
* @internal
*/
final class UpdateContext
{
public function __construct(
public readonly Migrator $migrator,
public readonly MigrationService $migrationService,
public readonly UpdateRunner $updateRunner,
) {}
}
Loading
Loading