Symfony 4 /原则插入初始数据库数据

时间:2019-03-08 08:44:44

标签: php symfony doctrine doctrine-migrations

我正在使用symfony 4.2,正在寻找一种将初始数据插入数据库的方法。 我试图创建的内容类似于一个初始安装脚本,该脚本执行一些sql插入操作(例如,夹具,但也适用于生产环境),可以通过控制台命令调用。

我当时正在考虑在学说迁移类中使用postUp函数,但是我不想为我设置的每个生产环境重写此函数。 有没有一种方法可以使用教义迁移功能来实现此目的,或者有首选的方法?

工作流程示例:

  • 通过克隆git存储库安装symfony
  • 执行迁移以创建/更新数据库表
  • 执行安装脚本以将所需的默认值插入数据库表中

1 个答案:

答案 0 :(得分:1)

在生产中使用原理装置包

不建议这样做,因为您可能会意外删除生产数据库,但我确实看到了一些在生产环境中使用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()
);