Symfony 4 / doctrine вставляет исходные данные базы данных - PullRequest
2 голосов
/ 08 марта 2019

Я использую Symfony 4.2 и ищу способ вставить исходные данные в базу данных.Я пытался создать что-то вроде начального сценария установки, который выполняет некоторые вставки sql (например, приборы, но также и для производственной среды), которые могут вызываться консольной командой.

Я думал об использованииФункция postUp в классе миграции доктрины, но я не хочу переписывать эту функцию для каждой производственной среды, которую я настроил.Есть ли способ использовать функцию переноса доктрин для этой цели или есть предпочтительный способ?

Пример рабочего процесса:

  • Установить Symfony путем клонирования репозитория git
  • Выполнение миграций для создания / обновления таблиц базы данных
  • Выполнение сценария установки для вставки необходимых значений по умолчанию в таблицы базы данных

1 Ответ

0 голосов
/ 08 марта 2019

Использование комплекта приспособлений doctrine в рабочей среде

Хотя это не рекомендуется, поскольку вы можете случайно отбросить производственную базу данных, я вижу некоторые допустимые варианты использования комплекта приспособлений dotrine в производственной среде.

Вы можете отредактировать config/bundles.php, чтобы включить комплект устройств Doctrine в производственной среде.

Изменить

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()
);
...