跳過主內容

Prisma Schema概覽

Prisma Schema(簡稱 schema)是配置 Prisma ORM 的主要方式。它包含以下幾個部分:

  • 資料來源:指定Prisma ORM應連線的資料來源的詳細資訊(例如 PostgreSQL 資料庫)
  • 生成器:指定應根據資料模型生成哪些客戶端(例如 Prisma Client)
  • 資料模型定義:定義你的應用程式模型(每個資料來源的資料形狀)及其關係

它通常是一個名為 schema.prisma 的檔案(或者多個帶有 .prisma 副檔名的檔案),儲存在一個已定義但可自定義的位置。如果你願意,也可以將你的Prisma schema組織在多個檔案中

參閱Prisma schema API參考 以獲取有關schema各部分的詳細資訊。

每當呼叫 prisma 命令時,CLI 通常會從 schema 讀取一些資訊,例如:

  • prisma generate:從Prisma schema中讀取所有上述資訊,以生成正確的資料來源客戶端程式碼(例如 Prisma Client)。
  • prisma migrate dev:讀取資料來源和資料模型定義,以建立新的遷移。

你也可以在 schema 中使用環境變數,以在呼叫 CLI 命令時提供配置選項。

示例

以下是一個Prisma Schema的示例,它指定了:

  • 一個數據源(PostgreSQL 或 MongoDB)
  • 一個生成器(Prisma Client)
  • 一個包含兩個模型(帶有一個關係)和一個 enum 的資料模型定義
  • 幾個原生資料型別屬性@db.VarChar(255), @db.ObjectId
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}

generator client {
provider = "prisma-client-js"
}

model User {
id Int @id @default(autoincrement())
createdAt DateTime @default(now())
email String @unique
name String?
role Role @default(USER)
posts Post[]
}

model Post {
id Int @id @default(autoincrement())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
published Boolean @default(false)
title String @db.VarChar(255)
author User? @relation(fields: [authorId], references: [id])
authorId Int?
}

enum Role {
USER
ADMIN
}

語法

Prisma Schema 檔案使用 Prisma Schema Language (PSL) 編寫。有關詳細資訊和示例,請參閱資料來源生成器資料模型定義頁面,當然還有Prisma Schema API參考

VS Code

PSL 的語法高亮可透過VS Code 擴充套件獲得(該擴充套件還允許你自動格式化 Prisma schema 的內容,並用紅色波浪線指示語法錯誤)。瞭解更多關於在編輯器中設定 Prisma ORM的資訊。

GitHub

GitHub 上的 PSL 程式碼片段也可以透過使用 .prisma 副檔名或在 Markdown 中用 prisma 註釋圍欄程式碼塊來渲染語法高亮。

```prisma
model User {
id Int @id @default(autoincrement())
createdAt DateTime @default(now())
email String @unique
name String?
}
```

從 schema 訪問環境變數

你可以使用環境變數在呼叫 CLI 命令或執行 Prisma Client 查詢時提供配置選項。

直接在 schema 中硬編碼 URL 是可能的,但不建議這樣做,因為它會帶來安全風險。在 schema 中使用環境變數可以讓你將秘密保留在 schema 之外,這反過來又提高了 schema 的可移植性,因為它允許你在不同的環境中使用。

可以使用 env() 函式訪問環境變數

datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}

你可以在以下地方使用 env() 函式:

  • 資料來源URL
  • 生成器二進位制目標

參閱環境變數,以獲取有關如何在開發過程中使用 .env 檔案的更多資訊。

註釋

Prisma Schema Language 支援兩種型別的註釋:

  • // comment:此註釋旨在提高讀者的清晰度,不包含在 schema 的抽象語法樹(AST)中。
  • /// comment:這些註釋將作為 AST 節點的描述出現在 schema 的抽象語法樹(AST)中。工具可以使用這些註釋來提供額外資訊。所有註釋都附加到下一個可用節點——自由浮動註釋不受支援,並且不包含在 AST 中。

以下是一些不同的示例:

/// This comment will get attached to the `User` node in the AST
model User {
/// This comment will get attached to the `id` node in the AST
id Int @default(autoincrement())
// This comment is just for you
weight Float /// This comment gets attached to the `weight` node
}

// This comment is just for you. It will not
// show up in the AST.

/// This comment will get attached to the
/// Customer node.
model Customer {}

自動格式化

Prisma ORM 支援自動格式化 .prisma 檔案。有以下兩種格式化 .prisma 檔案的方式:

沒有配置選項——格式化規則是固定的(類似於 Golang 的 gofmt,但與 Javascript 的 prettier 不同)

格式化規則

配置塊透過其 = 符號對齊

block _ {
key = "value"
key2 = 1
long_key = true
}

欄位定義對齊到由 2 個或更多空格分隔的列中

block _ {
id String @id
first_name LongNumeric @default
}

空行重置塊對齊和格式化規則

block _ {
key = "value"
key2 = 1
key10 = true

long_key = true
long_key_2 = true
}
block _ {
id String @id
@default

first_name LongNumeric @default
}

多行欄位屬性與其餘欄位屬性正確對齊

block _ {
id String @id
@default
first_name LongNumeric @default
}

塊屬性排序到塊的末尾

block _ {
key = "value"

@@attribute
}
© . This site is unofficial and not affiliated with Prisma Data, Inc.