跳到主要内容

Schema 位置

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

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 拆分成多个文件,可以按照以下方式进行设置

.
├── migrations
├── models
│ ├── posts.prisma
│ ├── users.prisma
│ └── ... other `.prisma` files
└── schema.prisma
注意

多文件 Prisma schema 自 v6.7.0 起已普遍可用 (Generally Available)。在此之前,可以通过 prismaSchemaFolder 预览特性标志来使用它们。

用法

使用多文件 Prisma schema 时,必须始终明确指定包含带有 datasource 块的 .prisma 文件的目录位置。

您可以通过以下三种方式之一指定位置

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

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

以上所有示例都假定您的 datasource 块定义在 prisma 目录内的 .prisma 文件中。

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

例如,假设 schema.prisma 定义了 datasource,您需要按以下方式放置 migrations 文件夹

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

多文件 Prisma Schema 使用技巧

我们发现有一些模式可以很好地配合此功能使用,并帮助您最大限度地发挥其优势

  • 按领域组织文件:将相关的模型分组到同一个文件中。例如,将所有用户相关的模型保存在 user.prisma 中,而将帖子相关的模型保存在 post.prisma 中。
  • 使用清晰的命名约定:schema 文件应该命名清晰简洁。使用 user.prismapost.prisma 等名称,而不是 myModels.prismaCommentFeaturesSchema.prisma
  • 有一个显而易见的“主” schema 文件:虽然现在您可以拥有任意数量的 schema 文件,但仍然需要一个地方来定义 datasourcegenerator 块。我们建议有一个明显的“主”文件,以便这些块易于查找。我们见过一些效果不错的命名,例如 main.prismaschema.prismabase.prisma

示例

我们在 dub.co 的 dub 项目上的分支是一个很好的真实世界项目示例,展示了如何适配使用多文件 Prisma Schema。