如何将 Prisma 模型拆分为单独的文件?

Has*_*man 16 sql orm node.js typescript prisma

我正在通过视频教程和官方文档学习 Prisma ORM。他们解释并编写所有模型代码在一个名为schema.prisma. 没关系,但是当应用程序增长时,它就会变得混乱。那么,我应该如何将模型定义分离到单独的文件中?

小智 10

目前 Prisma 不支持文件分割。不过我可以推荐 3 个解决方案。

选项 1:Prismix

Prismix使用模型和枚举通过 prismix 配置文件为 Prisma 模式创建跨文件的关系。

{
  "mixers": [
    {
        "input": [
            "base.prisma",
            "./modules/auth/auth.prisma", 
            "./modules/posts/posts.prisma",
        ],
        "output": "prisma/schema.prisma"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

将其放置在 prismix.config.json 文件中,该文件将定义您希望如何合并 Prisma 分段。

选项 2:Schemix

Schemax利用 Typescript 配置来处理模式分段。

例如:

// _schema.ts
import { createSchema } from "schemix";

export const PrismaSchema = createSchema({
  datasource: {
    provider: "postgresql",
    url: {
      env: "DATABASE_URL"
    },
  },
  generator: {
    provider: "prisma-client-js",
  },
});

export const UserModel = PrismaSchema.createModel("User");

import "./models/User.model";

PrismaSchema.export("./", "schema");
Run Code Online (Sandbox Code Playgroud)

User.model 内部

// models/User.model.ts

import { UserModel, PostModel, PostTypeEnum } from "../_schema";

UserModel
  .string("id", { id: true, default: { uuid: true } })
  .int("registrantNumber", { default: { autoincrement: true } })
  .boolean("isBanned", { default: false })
  .relation("posts", PostModel, { list: true })
  .raw('@@map("service_user")');
Run Code Online (Sandbox Code Playgroud)

然后,这将生成包含完整架构的 prisma/schema.prisma。我仅使用一个数据库作为示例(取自文档),但您应该明白这一点。

选项 3: Cat -> 生成

将您的架构分割为块部分文件名并运行:

cat *.part.prisma > schema.prisma
yarn prisma generate
Run Code Online (Sandbox Code Playgroud)

其中大多数(如果不是全部)都在当前有关 Prisma 架构文件分段支持的开放问题中引用https://github.com/prisma/prisma/issues/2377


Aus*_*rim 4

Prisma 还无法做到这一点。请参阅此未解决的问题以获取可能的解决方法https://github.com/prisma/prisma/issues/2377