Symfony 4 / doctrine插入初始数据库数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Symfony 4 / doctrine插入初始数据库数据相关的知识,希望对你有一定的参考价值。
我正在使用symfony 4.2并寻找一种方法将初始数据插入数据库。我试图创建的东西类似于初始设置脚本,它可以执行一些sql插入(如fixtures但也适用于生产环境),可以通过控制台命令调用。
我正在考虑在doctrine迁移类中使用postUp函数,但我不想为我设置的每个生产环境重写此函数。有没有办法为此目的使用doctrines迁移功能,还是有一种首选方式?
示例工作流程
- 通过克隆git存储库来安装symfony
- 执行迁移以创建/更新数据库表
- 执行安装脚本以将所需的默认值插入数据库表
答案
在生产中使用doctrine fixtures bundle
虽然这是不鼓励的,因为您可能会意外丢弃生产数据库,但我确实看到了一些在生产环境中使用dotrine fixtures包的有效用例。
您可以编辑config/bundles.php
以在生产环境中启用doctrine fixtures包。
更改
DoctrineBundleFixturesBundleDoctrineFixturesBundle::class => ['dev' => true, 'test' => true],
至
DoctrineBundleFixturesBundleDoctrineFixturesBundle::class => ['all' => true],
为夹具加载创建自己的命令
也不建议使用doctrine功能手动加载灯具,但这样您就可以添加其他检查,例如只填充新数据库。
$fixtures = (new DoctrineCommonDataFixturesLoader())->loadFromDirectory(__DIR__ . '/../src/DataFixture');
$loader = new DoctrineBundleFixturesBundleLoaderSymfonyFixturesLoader(new SymfonyComponentDependencyInjectionContainer());
$loader->addFixtures(
array_map(
function ($fixture) {
return [
'fixture' => $fixture,
'groups' => []
];
},
$fixtures
)
);
$purger = new DoctrineCommonDataFixturesPurgerORMPurger($entityManager);
$executor = new DoctrineCommonDataFixturesExecutorORMExecutor($entityManager, $purger);
$executor->execute(
$loader->getFixtures()
);
以上是关于Symfony 4 / doctrine插入初始数据库数据的主要内容,如果未能解决你的问题,请参考以下文章
Symfony / Doctrine:OneToMany插入导致null id
如何在 Symfony 4 上配置 Doctrine 以使用 yaml 映射