首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将Prisma模型分割成单独的文件?

如何将Prisma模型分割成单独的文件?
EN

Stack Overflow用户
提问于 2022-02-17 18:34:27
回答 3查看 5.3K关注 0票数 7

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

EN

回答 3

Stack Overflow用户

发布于 2022-06-29 03:00:50

此时,Prisma不支持文件分割。不过,我可以推荐3种解决方案。

选项1: Prismix

普里斯米克利用模型和枚举为您的Prisma模式创建跨文件的关系,通过一个prismix配置文件。

代码语言:javascript
运行
复制
{
  "mixers": [
    {
        "input": [
            "base.prisma",
            "./modules/auth/auth.prisma", 
            "./modules/posts/posts.prisma",
        ],
        "output": "prisma/schema.prisma"
    }
  ]
}

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

选项2: Schemix

Schemix利用类型记录配置来处理模式分段。

例如:

代码语言:javascript
运行
复制
// _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");

User.model内部

代码语言:javascript
运行
复制
// 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")');

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

选项3: Cat ->生成

将模式分割为块部件文件名并运行:

代码语言:javascript
运行
复制
cat *.part.prisma > schema.prisma
yarn prisma generate

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

票数 4
EN

Stack Overflow用户

发布于 2022-02-17 23:07:01

这在普里斯马看来是不可能的。关于可能的解决方案,请参阅这个悬而未决的问题,https://github.com/prisma/prisma/issues/2377

票数 3
EN

Stack Overflow用户

发布于 2022-02-18 22:47:14

有一个名为Prismix的库,它允许您编写任意数量的模式文件,下面是链接

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71163623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档