You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

跟随Ben Awad的lireddit教程运行Mikro-ORM首次迁移报错如何解决

你的所有问题核心根源大多来自MikroORM配置错误以及误用了MongoDB专属的主键规则在PostgreSQL上,按以下步骤逐一修复即可:

1. 修正MikroORM驱动与基础配置

首先打开你的mikro-orm.config.ts,确认以下配置项正确:

  • 驱动必须指定为PostgreSQL驱动,不要用MongoDB驱动:
import { PostgreSqlDriver } from '@mikro-orm/postgresql';
import path from 'path';
import { Options } from '@mikro-orm/core';

export default {
  driver: PostgreSqlDriver,
  // 实体路径配置,确保只扫你自己的实体文件夹,不要包含node_modules
  entities: [path.join(__dirname, './entities/**/*.js')],
  entitiesTs: [path.join(__dirname, './entities/**/*.ts')],
  // 迁移路径配置,仅指向自己的迁移文件夹
  migrations: {
    path: path.join(__dirname, './migrations'),
    pathTs: path.join(__dirname, './src/migrations'),
    pattern: /^[\w-]+\d+\.[tj]s$/,
  },
  dbName: '你的数据库名',
  // 其他数据库账号、密码配置
} as Options<PostgreSqlDriver>;

如果你之前配置的是MongoDB驱动,它会默认把主键映射为_id字段,就会触发你最开始的非空约束报错。

2. 修正Post实体的主键配置

PostgreSQL不需要下划线前缀的主键,也不需要ObjectId、SerializedPrimaryKey这类MongoDB专属配置,直接用自增主键即可:

import { Entity, PrimaryKey, Property } from "@mikro-orm/core";

@Entity()
export class Post {
  // 显式指定自增,数据库会自动生成id值,无需手动传入
  @PrimaryKey({ type: 'number', autoincrement: true })
  id!: number;

  @Property({ type: "date" })
  createdAt: Date = new Date();

  @Property({ type: "date", onUpdate: () => new Date() })
  updatedAt: Date = new Date();

  @Property({ type: "text" })
  title!: string;
}

3. 清理旧资源重新生成迁移

依次执行以下操作:

  • 打开你的PostgreSQL客户端,删除之前创建的post表以及mikro_orm_migrations表
  • 删除本地的src/migrations文件夹、dist文件夹、node_modules文件夹
  • 重新执行yarn install安装依赖
  • 运行命令生成初始迁移:
npx mikro-orm migration:create --initial

此时就不会再报「已有迁移存在」的错误,因为我们已经配置了迁移路径仅指向自己的文件夹,不会扫到node_modules里的文件。

4. 修正运行代码

不需要手动调用updateSchema,直接用迁移即可,你的运行代码本身没有问题,修复配置后直接运行yarn dev即可正常插入数据。

5. 新建实体报错的修复

你新建Posted实体后报schema相关的错误,是因为实体路径配置没有覆盖到该文件,确认你的entities和entitiesTs配置匹配你实体所在的文件夹即可解决。

内容的提问来源于stack exchange,提问作者Mel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 12:15:00