Для того что бы исключить кастомные (custom) или существующие таблицы из миграций Doctrine (команда в консоли migrations:diff) достаточно добавить ключ конфигурации настроек подключения.
На примере таблиц WordPress:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
'doctrine' => [ 'connection' => [ 'orm_default' => [ 'driverClass' => Doctrine\DBAL\Driver\PDO\MySQL\Driver::class, 'eventmanager' => 'orm_default', 'configuration' => 'orm_default', 'params' => [ 'driver' => 'pdo_mysql', 'user' => 'root', 'password' => 'password', 'dbname' => 'wordpress', 'host' => 'mysql', 'charset' => 'utf8', // 'port' => 3316, 'driverOptions' => [ 1002 => 'SET NAMES utf8' ], ], ], ], 'configuration' => [ 'orm_default' => [ 'metadata_cache' => 'array', 'query_cache' => 'array', 'result_cache' => 'array', 'hydration_cache' => 'array', 'generate_proxies' => true, 'proxy_dir' => 'data/doctrine/DoctrineORMModule/Proxy', 'proxy_namespace' => 'DoctrineORMModule\Proxy', 'filters' => [], 'filterSchemaAssetsExpression' => '~^(?!wp_)~' // Исключение всех таблиц WP из миграции ], ], ] |
В этом «конфиге» ключ «filterSchemaAssetsExpression» записывается как регулярное выражение. В данном случае имеется ввиду исключить все таблицы которые начинаются на wp_
Таким образом при создание миграции на основе ваших файлов через команду:
1 2 3 |
./vendor/bin/doctrine-migrations migrations:diff |
В свеже-создайной миграции не будет всех таблиц WordPress имеющих префикс wp_ (стандартно для свежей установки WP)
Актуально для проекта composer.json:
1 2 3 4 5 6 7 |
"require": { "doctrine/doctrine-orm-module": "^3.1", "doctrine/migrations": "^3.0", "doctrine/orm": "^2.7" }, |
Если не использовать «filterSchemaAssetsExpression» тогда при выполнение команды «diff» все таблицы не имеющие мета-описания в виде файлов проекта — будут добавлены в миграцию как DROP, пример ниже:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public function up(Schema $schema) : void { // this up() migration is auto-generated, please modify it to your needs $this->addSql('ALTER TABLE wp_wc_download_log DROP FOREIGN KEY fk_wp_wc_download_log_permission_id'); $this->addSql('DROP TABLE wp_actionscheduler_actions'); $this->addSql('DROP TABLE wp_actionscheduler_claims'); $this->addSql('DROP TABLE wp_actionscheduler_groups'); $this->addSql('DROP TABLE wp_actionscheduler_logs'); $this->addSql('DROP TABLE wp_commentmeta'); $this->addSql('DROP TABLE wp_comments'); $this->addSql('DROP TABLE wp_links'); $this->addSql('DROP TABLE wp_postmeta'); ...... } |
Перед переименованием таблицы вы должны проверить, что для всех ограничений внешних ключей таблицы есть явные имена в файлах вашей миграции, чтобы избежать автоматического назначения имён на основе принятого соглашения. Иначе имя ограничения внешнего ключа будет ссылаться на имя старой таблицы. Вдобавок к перечисленным типам столбцов существует несколько «модификаторов» столбцов, которые вы можете использовать при добавлении столбцов в таблицу. Например, чтобы сделать столбец «обнуляемым», используйте метод