提问者:小点点

Symfony 4/理论插入初始数据库数据


我正在使用symfony 4.2,并寻找一种方法来插入初始数据到数据库。我试图创建的是一个类似于初始安装脚本的东西,它执行一些sql插入(像夹具,但也适用于正式生产环境),可以通过控制台命令调用。

我曾考虑在条令迁移类中使用postp函数,但我不想为我设置的每个生产环境重写此函数。是否有一种方法可用于此目的,或者有一种首选方法?

工作流示例:

  • 通过克隆git存储库安装symfony

共1个答案

匿名用户

虽然不鼓励这样做,因为您可能会意外地使用它删除生产数据库,但我确实看到了在生产环境中使用dotrine fixtures捆绑包的一些有效用例。

您可以编辑config/bundle。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()
);