Как можно выбрать определенные таблицы в Symfony, используя schema_filter?

Здравствуйте! Чем могу помочь?
  • 7 февраля 2024 г. 4:38
Ответы на вопрос 2
`schema_filter` - это параметр конфигурации Doctrine в Symfony, который позволяет вам включать или исключать определенные таблицы из миграций, схемы базы данных и других задач, связанных с базой данных.

Чтобы выбрать определенные таблицы для работы, вы можете использовать регулярное выражение в параметре `schema_filter` вашего конфигурационного файла (например, `doctrine.yaml`).

Пример конфигурации:

```yaml
# config/packages/doctrine.yaml
doctrine:
    dbal:
        # ...
        schema_filter: ~^(?!t_ignore_)~ # Игнорировать все таблицы, начинающиеся на t_ignore_
```

В приведенном выше примере конфигурации все таблицы, чьи имена начинаются с `t_ignore_`, будут игнорироваться. Если вы хотите выбрать только определенные таблицы, вы можете настроить регулярное выражение следующим способом:

```yaml
# Выбрать таблицы, которые начинаются с "t_selected_"
doctrine:
    dbal:
        # ...
        schema_filter: ~^t_selected_~
```

Таким образом, только те таблицы, которые начинаются с `t_selected_`, будут включены в работу Doctrine.

Если вы хотите выбрать несколько шаблонов для таблиц, вы можете скомбинировать их в одном выражении:

```yaml
# Выбрать таблицы, которые начинаются с "t_selected_" или "u_selected_"
doctrine:
    dbal:
        # ...
        schema_filter: ~^(t_selected_|u_selected_)~
```

Тут `t_selected_` и `u_selected_` - это начала имен таблиц, которые вы хотите включить, а `|` - это оператор "или" в регулярном выражении.

**Примечание:** `schema_filter` работает только с полными именами таблиц и не учитывает префиксы таблиц, которые могут быть заданы в конфигурации.

Перед применением изменений убедитесь, что ваши регулярные выражения правильно отформатированы и тестируют то, что вам нужно, так как ошибки в регулярных выражениях могут привести к непредвиденным результатам, например, исключению важных таблиц или включению тех, которые не должны учитываться.
Чтобы не было, как вы пишите, "накопительного эффекта в миграциях" их надо выполнять - doctrine:migrations:migrate 
После этого создадутся необходимые таблицы. А так доктрина каждый раз сопоставляет сущности с тем что есть в бд и исходя из этого делает класс миграции.
Похожие вопросы