TypeORM - 运行服务器时自动填充表

Posted

技术标签:

【中文标题】TypeORM - 运行服务器时自动填充表【英文标题】:TypeORM - Auto fill table when running server 【发布时间】:2021-12-12 16:00:32 【问题描述】:

在 TypeORM 中,可以在运行服务器时运行迁移。我有一张名为 Roles 的表。这些是用户可以拥有的不同角色(管理员、用户、...)。有没有办法将这些值自动插入到创建的角色表中?

我知道我可以通过插入每个角色来更改迁移文件。但是有没有更清洁的方法来实现这一点?

【问题讨论】:

【参考方案1】:

您可以使用typeorm-seeding 库,它很容易使用,在创建实体后,您应该创建一个工厂和播种机来运行您的种子,一个简单的示例:

    Factory
The purpose of a factory is to create new entities with generate data.

Note: Factories can also be used to generate data for testing.

// user.factory.ts
define(User, (faker: typeof Faker) => 
  const gender = faker.datatype.number(1)
  const firstName = faker.name.firstName(gender)
  const lastName = faker.name.lastName(gender)

  const user = new User()
  user.name = `$firstName $lastName`
  user.password = faker.random.word()
  return user
)

// pet.factory.ts
define(Pet, (faker: typeof Faker) => 
  const gender = faker.datatype.number(1)
  const name = faker.name.firstName(gender)

  const pet = new Pet()
  pet.name = name
  pet.age = faker.datatype.number()
  pet.user = factory(User)() as any
  return pet
)
Seeder
And last but not least, create a seeder. The seeder can be called by the configured cli command seed:run. In this case, it generates 10 pets with a owner (User).

Note: seed:run must be configured first. Go to CLI Configuration.

// create-pets.seed.ts
export default class CreatePets implements Seeder 
  public async run(factory: Factory, connection: Connection): Promise<any> 
    await factory(Pet)().createMany(10)
  

您可以在文档中找到所需的一切

【讨论】:

以上是关于TypeORM - 运行服务器时自动填充表的主要内容,如果未能解决你的问题,请参考以下文章

NestJS、PortsgreSQL 和 TypeORM - 迁移运行不正常

使用 NestJS 和 TypeOrm,在我运行 NestJS 应用程序后不会自动创建表

播种时NestJS中的TypeOrm:RepositoryNotFoundError

TypeORM:尝试手动运行迁移时“没有待处理的迁移”

如何在 TypeORM 中使用具有自动递增 id 列的表进行级联插入

Range 类的自动填充方法在填充表时失败