Я использую symfony 4.2 и ищу способ вставить исходные данные в базу данных. То, что я пытался создать, это что-то вроде сценария начальной настройки, который выполняет некоторые вставки sql (например, фикстуры, но также и для производственной среды), которые можно вызвать с помощью консольной команды.
Я думал об использовании функции postUp в классе миграции доктрины, но я не хочу переписывать эту функцию для каждой производственной среды, которую я настраиваю. Есть ли способ использовать функциональность миграции доктрин для этой цели или есть предпочтительный способ?
Пример рабочего процесса:
В итоге я так и сделал. Я создал пользовательскую команду для загрузки диспетчера доктрин с помощью ContainerInterface. Я не был знаком с созданием пользовательской команды. Вот ссылка, которую я использовал: symfony.com/doc/current/console.html






Хотя это не рекомендуется, потому что вы можете случайно удалить свою производственную базу данных, я вижу несколько допустимых вариантов использования пакета фикстур dotrine в производственной среде.
Вы можете отредактировать свой config/bundles.php, чтобы включить пакет фикстур доктрины в производственной среде.
Изменять
Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle::class => ['dev' => true, 'test' => true],
к
Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle::class => ['all' => true],
Использование функциональности доктрины для ручной загрузки фикстур также не рекомендуется, но таким образом вы можете добавить дополнительные проверки, например, заполнить только новую базу данных.
$fixtures = (new \Doctrine\Common\DataFixtures\Loader())->loadFromDirectory(__DIR__ . '/../src/DataFixture');
$loader = new \Doctrine\Bundle\FixturesBundle\Loader\SymfonyFixturesLoader(new \Symfony\Component\DependencyInjection\Container());
$loader->addFixtures(
array_map(
function ($fixture) {
return [
'fixture' => $fixture,
'groups' => []
];
},
$fixtures
)
);
$purger = new Doctrine\Common\DataFixtures\Purger\ORMPurger($entityManager);
$executor = new Doctrine\Common\DataFixtures\Executor\ORMExecutor($entityManager, $purger);
$executor->execute(
$loader->getFixtures()
);
Итак, создайте команду и запустите ее.