Я новичок в изучении Symfony (Symfony 4.1.6) и не могу понять этого.
У меня есть база данных, и она содержит множество таблиц для заполнения входных данных типа html select. они находятся в базе данных, чтобы гарантировать ограничения внешнего ключа в других записях.
Есть ли способ «добавить» эти данные в базу данных и отследить их? (через git) или мне следует прибегнуть к хранению файла SQL только с "вставками"
Я посмотрел на приспособления, но, похоже, они в основном предназначены для фиктивных данных. Я хочу вставить реальные данные. Какова лучшая практика, если таковая существует?
**** ОБНОВЛЕНИЕ ****
Я должен добавить, что разработка этого проекта началась за пределами Symfony, и поэтому база данных уже была создана вручную с несколькими записями. Я использовал bin/console doctrine:mapping:import 'App\Entity' annotation --path=src/Entity для создания сущностей.
Есть ли аналогичный способ "высосать" несколько записей из базы данных?
Возможно, мне просто нужно вручную добавить операторы вставки SQL в первый (или второй) файл миграции.
Миграции делают разницу между вашими объектами и текущим макетом базы данных и автоматически генерируют класс миграции на этом основании.






Приспособления также хороши для этого варианта использования, но будьте осторожны, чтобы ничего случайно не перезаписать.
Если вам нужно заполнить их только один раз, миграции - хороший вариант. (Вы должны использовать это в любом случае для управления изменениями схемы.) Например, я почти всегда использую миграцию для вставки пользователей-администраторов и некоторых других действительно «фиксированных» данных.
как добиться миграции для «сбора» данных, а не только изменения схемы? Мне это кажется более подходящим.
Просто напишите SQL, как обычно. Миграции помогут вам отследить, что установлено, а что нет.
Вы также можете рассмотреть возможность миграции ContainerAware symfony.com/doc/master/bundles/DoctrineMigrationsBundle/…
может вы ищете https://phinx.org/ или что-то в этом роде?
редактировать: http://docs.phinx.org/en/latest/migrations.html#inserting-data
В symfony работа с производственной базой данных, как правило, основана на создании и выполнении миграций благодаря DoctrineMigrationBundle.
Всегда, когда вы вносите какие-либо изменения в сущность, вам необходимо обновить макет базы данных. Вы делаете это, создавая миграцию с помощью команды doctrine:migrations:diff, внимательно просматривая класс миграции и после этого выполняя его на рабочем сервере с помощью команды doctrine:migrations:migrate. Речь идет о схеме базы данных.
В свою очередь, когда вам нужно вставить, удалить или обновить предопределенные данные купола в базе данных, вы можете создать пустой класс миграции с помощью doctrine:migrations:generate и заполнить все, что захотите. Вот несколько примеров:
- Напишите необработанные запросы sql и выполните - это самый простой способ, подходящий для простых данных
- Создание сущностей и сохранение с помощью диспетчера сущностей
- Загрузить базу данных приспособлений - это наиболее сложное решение.
Таким образом, вы не потеряете данные, уже хранящиеся в производственной базе данных, при обновлении приложения.
Дополнительные сведения см. В документации DoctrineMigrationsBundle: https://symfony.com/doc/master/bundles/DoctrineMigrationsBundle/index.html, а также в документации DoctrineFixturesBundle: https://symfony.com/doc/current/bundles/DoctrineFixturesBundle/index.html
Я думаю это ответ
создание моих собственных операторов INSERT INTO ... в src/Migrations/Version.....php было правильным решением
При дальнейшем чтении и осмотре приспособлений я вижу, что они настроены только как среда разработки - и действительно не для производственного использования. Я склоняюсь к миграции, поскольку это кажется наиболее разумным. Я надеюсь, что может быть "автоматический" способ сгенерировать это.