跳到主要内容

Schema 位置

Prisma Schema 的默认名称是 prisma 文件夹中的单个文件 schema.prisma。当您的 schema 像这样命名时,Prisma CLI 将自动检测到它。

如果您正在使用 prismaSchemaFolder 预览功能,则 prisma/schema 目录中的任何文件都会被自动检测到。

Prisma Schema 位置

Prisma CLI 在以下位置按顺序查找 Prisma Schema

  1. --schema 标志指定的位置,当您 introspectgeneratemigratestudio 时可用

    prisma generate --schema=./alternative/schema.prisma
  2. package.json 文件中指定的位置(版本 2.7.0 及更高版本)

    "prisma": {
    "schema": "db/schema.prisma"
    }
  3. 默认位置

    • ./prisma/schema.prisma
    • ./schema.prisma

Prisma CLI 输出将要使用的 schema 的路径。以下示例显示了 prisma db pull 的终端输出

Environment variables loaded from .env
Prisma Schema loaded from prisma/schema.prisma

Introspecting based on datasource defined in prisma/schema.prisma …

✔ Introspected 4 models and wrote them into prisma/schema.prisma in 239ms

Run prisma generate to generate Prisma Client.

多文件 Prisma Schema (预览)

如果您喜欢将 Prisma schema 拆分为多个文件,您可以设置如下结构

my-app/
├─ ...
├─ prisma/
│ ├─ schema/
│ │ ├─ post.prisma
│ │ ├─ schema.prisma
│ │ ├─ user.prisma
├─ ...

用法

您可以通过在您的 generator 块上启用 prismaSchemaFolder 预览功能,将您的 Prisma schema 拆分为多个文件

schema.prisma
generator client {
provider = "prisma-client-js"
previewFeatures = ["prismaSchemaFolder"]
}

v6.6.0 开始,您必须始终显式指定您的 Prisma schema 文件夹的位置。不再有在默认位置“神奇”检测 Prisma schema 文件夹的功能。

您可以通过以下三种方式之一做到这一点

  • --schema 选项传递给您的 Prisma CLI 命令(例如 prisma migrate dev --schema ./prisma/schema
  • package.json 中设置 prisma.schema 字段
    // package.json
    {
    "prisma": {
    "schema": "./schema"
    }
    }
  • prisma.config.ts 中设置 schema 属性
    import path from 'node:path'
    import type { PrismaConfig } from 'prisma'

    export default {
    earlyAccess: true,
    schema: path.join('prisma', 'schema'),
    } satisfies PrismaConfig<Env>

您还必须将 migrations 目录放置在定义 datasource 块的 .prisma 文件旁边。

例如,假设 schema.prisma 定义了 datasource,以下是如何放置 migrations 文件夹

# `migrations` and `schema.prisma` are on the same level
.
├── migrations
├── models
│ ├── posts.prisma
│ └── users.prisma
└── schema.prisma

如何将现有的 Prisma CLI 命令与多文件 Prisma schema 文件一起使用

对于大多数 Prisma CLI 命令,无需进行任何更改即可使用多文件 Prisma schema。只有在需要通过选项提供 schema 的特定情况下,才需要更改命令。在这些情况下,只需将对文件的引用替换为目录。例如,以下 prisma db push 命令

npx prisma db push --schema custom/path/to/my/schema.prisma

变成以下这样

npx prisma db push --schema custom/path/to/my/schema  # note this is now a directory!

多文件 Prisma Schema 的技巧

我们发现一些模式使用此功能效果良好,并将帮助您充分利用它

  • 按领域组织您的文件:将相关模型分组到同一文件中。例如,将所有用户相关的模型放在 user.prisma 中,而将帖子相关的模型放在 post.prisma 中。尽量避免使用“大杂烩”schema 文件。

  • 使用清晰的命名约定:schema 文件应命名清晰简洁。使用像 user.prismapost.prisma 这样的名称,而不是 myModels.prismaCommentFeaturesSchema.prisma

  • 拥有一个明显的“主”schema 文件:虽然您现在可以拥有任意数量的 schema 文件,但您仍然需要一个定义 datasourcegenerator 块的位置。我们建议您拥有一个明显的“主”文件,以便这些块易于查找。我们看到 main.prismaschema.prismabase.prisma 是一些效果良好的例子。

示例

我们 dub.co 的 dub 分支是一个很好的真实世界项目示例,该项目已改编为使用多文件 Prisma Schema。

了解更多关于 prismaSchemaFolder 预览功能的信息

要提供关于 prismaSchemaFolder 预览功能的反馈,请参考我们专门的 Github 讨论