如何使用 doctrine ORM 在 Symfony 中设置初始数据(不是测试数据)

How to set initial data (not test data) in Symfony with doctrine ORM

我是 Symfony 的新手,(Symfony 4.1.6) 无法理解。

我有一个数据库,它包含许多用于填充 html select 类型输入的表。它们在数据库中以确保其他记录中的外键约束。

有没有办法"add"将这些数据写入数据库并进行跟踪? (通过 git)或者我应该只保留 "inserts"

的 SQL 文件

我查看了 Fixtures,但它们似乎主要用于虚拟数据。我想插入真实数据。 "best practice" 是什么?

****更新****
我应该补充一点,这个项目的开发是在 Symfony 之外开始的,所以数据库已经用少量记录手动创建了。我使用 bin/console doctrine:mapping:import 'App\Entity' annotation --path=src/Entity 来构建实体。

有没有类似的方法"suck"数据库中的几条记录也一样?

也许我只需要手动将 SQL 插入语句添加到第一个(或第二个)迁移文件中。

夹具也适用于此用例,但请注意不要意外覆盖任何内容。

如果您只需要填充一次,迁移是一个不错的选择。 (无论如何,您应该使用它来管理架构更改。) 例如,我几乎总是使用迁移来插入管理员用户和其他一些真正的 "fixed" 数据。

也许您正在寻找 https://phinx.org/ 或类似的东西?

编辑:http://docs.phinx.org/en/latest/migrations.html#inserting-data

在 symfony 中,使用生产数据库,通常基于创建和执行迁移感谢 DoctrineMigrationBundle

总是当你对实体进行一些更改时,你需要更新数据库布局。为此,您可以通过命令 doctrine:migrations:diff 创建迁移,仔细检查迁移 class,然后使用命令 doctrine:migrations:migrate 在生产服务器上执行它。这是关于数据库模式的。

反过来,当您需要在数据库中插入、删除或更新圆顶预定义数据时,您可以通过 doctrine:migrations:generate 创建空迁移 class 并填充任何你想要的。一些例子是: - 编写原始 sql 查询并执行 - 这是最简单的方法,适用于简单数据 - 创建实体并由实体管理器持久化 - 加载数据库装置 - 这是最复杂的解决方案。

这样,当您升级您的应用程序时,您不会丢失已经存储在生产数据库中的数据。

DoctrineMigrationsBundle 文档中的更多详细信息:https://symfony.com/doc/master/bundles/DoctrineMigrationsBundle/index.html and also DoctrineFixturesBundle docs: https://symfony.com/doc/current/bundles/DoctrineFixturesBundle/index.html