我正在使用typeorm ORM运行我的Node JS后端.
来自Entity Framework,很容易用几行代表db
Database.SetInitializer(new DbInitializer());
DbInitializer类将包含所有种子信息.
是否有类似的方法在TypeOrm中播种数据库?如果没有,建议的方法是什么?
1)使用数据插入语句创建新的迁移?2)创建一个实例并保存实体的任务?
不幸的是,没有正式发布的TypeORM解决方案(当时这个答案正在发布).
但是我们可以使用一个很好的解决方法:
在ormconfig.js
文件中创建另一个连接,并为"迁移"指定另一个文件夹 - 实际上是我们的种子
生成并运行你的种子-c
.而已!
示例ormconfig.js:
module.exports = [ { ..., migrations: [ 'src/migrations/*.ts' ], cli: { migrationsDir: 'src/migrations', } }, { name: 'seed', ..., migrations: [ 'src/seeds/*.ts' ], cli: { migrationsDir: 'src/seeds', } } ]
示例package.json:
{ ... scripts: { "seed:generate": "ts-node typeorm migration:generate -c seed -n ", "seed:run": "ts-node typeorm migration:run -c seed", "seed:revert": "ts-node typeorm migration:revert -c seed", }, ... }
我很想看到这样的功能,以及(和我们并不孤单),但在 那一刻,有播种没有官方的功能。
由于缺乏这种内置功能,我认为下一个最好的方法是创建一个名为的迁移脚本0-Seed
(这样它就可以在您可能拥有的所有其他迁移脚本之前)并在其中填充种子数据。
@bitwit创建了一个片段,可能对您有用;此功能可从yaml文件读取数据,您可以将其合并到种子迁移脚本中。
但是,经过一些研究,我发现了另一种有趣的方法:将after_create
事件绑定到表,并在侦听器中初始化数据。
我还没有实现它,所以我不确定可以直接用TypeORM完成它。