Всем привет.
Ребят, сижу парюсь с регуляркой уже почти сутки. Доктрина выдает некорректный вариант.
Суть такова, что в базе уже существуют таблицы, мне нужно их исключить и выбирать мои таблицы находящиеся в нужных мне схемах PostgreSQL, при этом нужно также выбирать таблицу миграций, чтобы можно было накатывать и откатывать миграции.
У меня есть схема PostgreSQL test_project тут лежат таблицы проекта для теста, есть схема migration_tables - тут будут лежать таблицы миграций принадлежащие определенному проекту (поставили такое ТЗ, что будут использоваться схемы для разграничения таблиц по проектам, вместо отдельных баз данных)
Почитал мануалы, ответы на аналогичный вопрос, и составил вот такую регулярку и добавил в файл doctrine.yaml
doctrine:
dbal:
url: '%env(resolve:DATABASE_URL)%'
schema_filter: '~^(shop_|migrations_tables.shop_migrations)~'
Получается так, что в схеме test_project лежат таблицы начинающиеся с shop_ а в схеме migrations_tables лежит таблица миграций shop_migrations (понимаю, что нейминг хрень, но это в качестве примера сейчас и для того, чтобы разобраться в данном вопросе)
У первой созданной сущности указал такой атрибут
#[ORM\Table(name: 'shop_book', schema: 'test_project')]
После запуска команды symfony console doctrine:migration:diff создается класс миграции с следующим содержимым:
<?php
declare(strict_types=1);
namespace DoctrineMigrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
/**
* Auto-generated Migration: Please modify to your needs!
*/
final class Version20240207041324 extends AbstractMigration
{
public function getDescription(): string
{
return '';
}
public function up(Schema $schema): void
{
// this up() migration is auto-generated, please modify it to your needs
$this->addSql('CREATE SCHEMA test_project');
$this->addSql('CREATE SEQUENCE test_project.shop_book_id_seq INCREMENT BY 1 MINVALUE 1 START 1');
$this->addSql('CREATE TABLE test_project.shop_book (id INT NOT NULL, title VARCHAR(255) NOT NULL, PRIMARY KEY(id))');
}
public function down(Schema $schema): void
{
// this down() migration is auto-generated, please modify it to your needs
$this->addSql('DROP SEQUENCE test_project.shop_book_id_seq CASCADE');
$this->addSql('DROP TABLE test_project.shop_book');
}
}
Тут все норм. Одна сущность и для нее создается таблица, все корректно. Накатываю миграцию в базу и затем если я добавляю следующую сущность shop_book_category (атрибут указываю такой #[ORM\Table(name: 'shop_book_category', schema: 'test_project')] ), затем вызываю команду symfony console doctrine:migration:diff
вот тут неожиданное поведение происходит, создается миграция в которой по-новой должна создаться таблица shop_book и после этого уже только будет создана таблица shop_book_category
<?php
declare(strict_types=1);
namespace DoctrineMigrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
/**
* Auto-generated Migration: Please modify to your needs!
*/
final class Version20240207042122 extends AbstractMigration
{
public function getDescription(): string
{
return '';
}
public function up(Schema $schema): void
{
// this up() migration is auto-generated, please modify it to your needs
$this->addSql('CREATE SEQUENCE test_project.shop_book_id_seq INCREMENT BY 1 MINVALUE 1 START 1');
$this->addSql('CREATE SEQUENCE test_project.shop_book_category_id_seq INCREMENT BY 1 MINVALUE 1 START 1');
$this->addSql('CREATE TABLE test_project.shop_book (id INT NOT NULL, title VARCHAR(255) NOT NULL, PRIMARY KEY(id))');
$this->addSql('CREATE TABLE test_project.shop_book_category (id INT NOT NULL, title VARCHAR(255) NOT NULL, slug VARCHAR(255) NOT NULL, PRIMARY KEY(id))');
}
public function down(Schema $schema): void
{
// this down() migration is auto-generated, please modify it to your needs
$this->addSql('DROP SEQUENCE test_project.shop_book_id_seq CASCADE');
$this->addSql('DROP SEQUENCE test_project.shop_book_category_id_seq CASCADE');
$this->addSql('DROP TABLE test_project.shop_book');
$this->addSql('DROP TABLE test_project.shop_book_category');
}
}
Т.е. происходит накопительный эффект, который не желателен, может кто-то решал подобную задачу? Буду благодарен, если поделитесь решением, а то голову сломал, почему такое происходит(((