【问题标题】:Mikro-Orm not creating a sqlite tableMikro-Orm 没有创建一个 sqlite 表
【发布时间】:2021-08-17 20:51:58
【问题描述】:

我在 nestjs 中使用 mikro-orm 创建一个 sqlite 数据库。由于某种原因,Mikro-Orm 将创建数据库文件(sandox.sqlite3)但不会在数据库中创建表。我创建了一个包含实体的任务模块。

应用模块:

@Module({
  imports: [
    MikroOrmModule.forRoot({
      entities: ['./dist/**/entities/*'],
      entitiesTs: ['./src/**/entities/*'],
      dbName: 'sandbox.sqlite3',
      type: 'sqlite',
    }),
    TasksModule,
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

任务模块:

@Module({
  imports: [MikroOrmModule.forFeature([Task])],
  controllers: [TasksController],
  providers: [TasksService],
})
export class TasksModule {}

任务服务: 当我发出创建帖子请求时,会收到 201 响应以及我发送的数据。但是数据库中没有创建表。

@Injectable()
export class TasksService {
  constructor(
    @InjectRepository(Task)
    private readonly taskRepository: EntityRepository<Task>,
  ) {}

  create(createTaskDto: CreateTaskDto) {
    console.log(createTaskDto.name);
    return this.taskRepository.create({ ...createTaskDto });
  }

  findAll() {
    return this.taskRepository.findAll();
  }

  findOne(id: number) {
    return this.taskRepository.findOne({ id });
  }

  async update(id: number, updateTaskDto: UpdateTaskDto) {
    const task = await this.taskRepository.findOne({ id });
    task.name = updateTaskDto.name ?? task.name;
    task.description = updateTaskDto.description ?? task.description;
    task.assign({ id });
    // return this.taskRepository.(task);
  }

  remove(id: number) {
    // return this.taskRepository.removeAndFlush();
  }
}

任务实体:

@Entity()
export class Task extends BaseEntity<Task, 'id'> {
  @PrimaryKey()
  id: number;

  @Property()
  name: string;

  @Property()
  description: string;
}

【问题讨论】:

    标签: nestjs mikro-orm


    【解决方案1】:

    您需要通过SchemaGenerator 或通过迁移手动同步数据库。如果你有 CLI 设置,你可以npx mikro-orm schema:update --run

    https://mikro-orm.io/docs/faq#how-can-i-synchronize-my-database-schema-with-the-entities

    【讨论】:

    • 我按照您的回答手动同步了数据库。现在没有在数据库中输入数据。它只是将带有成功代码的 json 返回给我,但数据库仍然是空的。
    • 你需要调用flush。 em.create 只创建实体实例,和使用实体构造函数一样
    • 我想通了。我没有用 create 创建的任务实体调用persistAndFlush。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 2021-02-08
    • 2021-01-23
    • 2013-06-28
    • 2021-09-03
    相关资源
    最近更新 更多