【问题标题】:Symfony 4 / doctrine insert initial database dataSymfony 4 / 学说插入初始数据库数据
【发布时间】:2019-07-30 06:27:57
【问题描述】:

我正在使用 symfony 4.2 并寻找一种将初始数据插入数据库的方法。 我试图创建的是一个初始设置脚本,它执行一些可以由控制台命令调用的 sql 插入(如固定装置,但也适用于生产环境)。

我想在学说迁移类中使用 postUp 函数,但我不想为我设置的每个生产环境重写此函数。 有没有办法为此目的使用学说迁移功能,还是有首选方法?

示例工作流程:

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

【问题讨论】:

  • 所以,创建一个命令并运行它。
  • 最后,我是这样做的。我创建了一个自定义命令来通过 ContainerInterface 加载学说管理器。我不熟悉自定义命令的创建。这是我使用的参考:symfony.com/doc/current/console.html

标签: php symfony doctrine doctrine-migrations


【解决方案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()
);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-21
    • 2018-11-16
    • 2016-11-09
    • 2015-09-01
    • 1970-01-01
    • 2014-04-11
    • 2011-04-20
    相关资源
    最近更新 更多