Symfony 4 / Doctrine 插入初始数据库数据

3
我正在使用symfony 4.2,并且正在寻找一种向数据库插入初始数据的方法。 我的想法是创建类似于初始设置脚本的东西,执行一些SQL插入(类似于夹具,但也适用于生产环境),可以通过控制台命令调用。
我考虑使用Doctrine迁移类中的postUp函数,但我不想为每个设置的生产环境重写此函数。 是否有一种方法可以使用Doctrine迁移功能来实现此目的,或者有没有首选的方法?
示例工作流程:
  • 通过克隆git存储库安装Symfony
  • 执行迁移以创建/更新数据库表
  • 执行设置脚本以将所需的默认值插入到数据库表中

1
创建一个命令并运行它。 - u_mulder
最后,我是这样做的。我创建了一个自定义命令,通过ContainerInterface加载Doctrine管理器。我不熟悉创建自定义命令。这是我使用的参考文献:https://symfony.com/doc/current/console.html - igi
1个回答

1

在生产环境中使用Doctrine Fixtures Bundle

虽然这是不被建议的,因为您可能会意外删除生产数据库,但我确实看到了一些在生产环境中使用Doctrine Fixtures Bundle的有效用例。

您可以编辑config/bundles.php以在生产环境中启用Doctrine Fixtures Bundle。

更改:

Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle::class => ['dev' => true, 'test' => true],

to

Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle::class => ['all' => true],

创建自己的夹具加载命令

使用Doctrine功能手动加载夹具也是不推荐的,但这样可以添加额外的检查,例如只填充一个全新的数据库。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接