Мало кто знает, но что бы работал migration:diff вам не нужно ставить ORM.
Что бы это работало объявим простой сервис:
<?php
use Doctrine\DBAL\Migrations\Provider\SchemaProviderInterface;
use Doctrine\DBAL\Schema\Schema;
class DatabaseSchema implements SchemaProviderInterface
{
public function createSchema(): Schema
{
$schema = new Schema();
$test = $schema->createTable('test');
$test->addColumn('id', 'guid');
$test->addColumn('name', 'string');
$test->setPrimaryKey(['id']);
return $schema;
}
}
Регистрируем этот класс как сервис:
services:
DatabaseSchema: ~
И переопределяем команду для генерации миграций:
services:
Doctrine\Bundle\MigrationsBundle\Command\MigrationsDiffDoctrineCommand:
tags: ['console.command']
arguments:
- '@DatabaseSchema'
вуаля. Теперь вы можете просто вызвать bin/console doctrine:migration:diff
и вуаля.
Вы так же можете задекорировать OrmSchemaProvider и накладывать сверху схему которую не менеджит ORM, или же еще как-нибудь. Да и вообще помимо доктрины есть и другие либы для работы с базой.
Удачи.
При работе с
"doctrine/migrations": "~3.0"
мануал следующий.Doctrine\Migrations\Tools\Console\Command\DiffCommand
и появилась фабрика зависимостейDoctrine\Migrations\DependencyFactory
в которую нужно заброситьDatabaseSchema
. В Symfony 4 файл конфигурации находится вconfig\packages\doctrine_migrations.yaml
. В конфигурации нужно прописать следующее:Вот и все. Теперь можно вызывать
bin/console doctrine:migrations:diff
.