php - Symfony 4/doctrine 插入初始数据库数据

标签 php symfony doctrine doctrine-migrations

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

我想在 doctrine 迁移类中使用 postUp 函数,但我不想为我设置的每个生产环境重写这个函数。 有没有一种方法可以为此目的使用 Doctrine 迁移功能,或者是否有一种首选方法?

示例工作流程:

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

最佳答案

在生产中使用 doctrine fixtures bundle

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

您可以编辑 config/bundles.php 以在生产环境中启用 doctrine fixtures bundle。

改变

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

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

关于php - Symfony 4/doctrine 插入初始数据库数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55059543/

相关文章:

javascript - 在 Wordpress 网站上使用 Google Analytics 的用户 ID 功能

php - wp_nav_menu() 不分配 ul 类

php - MessageMedia Webhooks PHP SDK 错误

php - 如何向PHP服务器发送数据?

php - 如何使用 FOSRestBundle 以 JSON 格式返回或显示数据

php - 在 symfony 中设置默认时区

php - 在 symfony2 中限制每秒 swiftmailer 电子邮件

database - 如何使用 Symfony 2 和 Twig 显示保存在数据库中的 HTML 标签

php - 在没有 shell 访问的情况下部署 symfony

php - 左加入 Doctrine 查询语言