php - Symfony 4 / 学说插入初始数据库数据
问题描述
我正在使用 symfony 4.2 并寻找一种将初始数据插入数据库的方法。我试图创建的是类似于初始设置脚本的东西,它可以通过控制台命令调用一些 sql 插入(如固定装置,但也适用于生产环境)。
我正在考虑在教义迁移类中使用 postUp 函数,但我不想为我设置的每个生产环境重写此函数。有没有办法为此目的使用学说迁移功能,还是有首选方法?
示例工作流程:
- 通过克隆 git 存储库来安装 symfony
- 执行迁移以创建/更新数据库表
- 执行设置脚本将所需的默认值插入到数据库表中
解决方案
在生产中使用学说夹具包
虽然不鼓励这样做,因为您可能会因此意外删除生产数据库,但我确实看到了一些在生产环境中使用 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()
);
推荐阅读
- c# - 使用 Documentformat.Openxml 从字典动态生成 CSV 数据透视表
- reactjs - 拒绝在框架中显示“https://meet.google.com/”,因为它将“X-Frame-Options”设置为“sameorigin”。在 ReactJS 中
- javascript - React Native - 为 FlatList Ref 定义类型
- istio - 如何根据域名和URL创建envoyfilter做localratelimit?
- javascript - Ajax Datatable 如何显示函数中的数据?
- node.js - 如何解决 MongodoDB 和 Mongoose 中的“缓冲超时 10000 毫秒”错误
- jquery - 谁能解释为什么删除后元素的内容仍然显示
- flutter - 飞镖空检查:为什么我必须在已经检查空(!= null)之后使用空检查运算符('!')
- css - 如何修复此 CSS 代码?我需要使用 CSS 替换内容
- javascript - 使用 Firebase/auth 登录 - firebase__WEBPACK_IMPORTED_MODULE_3 __