prismaデータ・モデル基本でよく使うチートシート
2022年1月28日
prismaの環境構築に関しては下記をご覧ください。
https://abeshi-blog.com/blog/8m8tb45wbg
前提
postgresqlを使用している
公式ドキュメントにそってデータモデルを定義する際の情報をどんどん書いていきます。
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
}
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
role Role @default(USER)
posts Post[]
profile Profile?
}
model Profile {
id Int @id @default(autoincrement())
bio String
user User @relation(fields: [userId], references: [id])
userId Int
}
model Post {
id Int @id @default(autoincrement())
createdAt DateTime @default(now())
title String
published Boolean @default(false)
author User @relation(fields: [authorId], references: [id])
authorId Int
categories Category[] @relation(references: [id])
}
model Category {
id Int @id @default(autoincrement())
name String
posts Post[] @relation(references: [id])
}
enum Role {
USER
ADMIN
}
@id ... idを表します
@default ... デフォルト値を表し引数を取れます。
autoincrement()
自動で一意のシーケンス番号を生成します
例
id Int @id @default(autoincrement())
cuid()
cuidを生成します
例:
id String @id @default(cuid())
uuid()
uuidを生成します
例
id String @id @default(uuid())
@unique
重複を予防します
例
email String @unique
@default()
引数をとりデフォルト値を設定します。
例
published Boolean @default(false)
デフォルト値は静的な値または下記の関数のどれかです。
- autoincrement()
- dbgenerated()
- cuid()
- uuid()
- now()
@@unique
複数の重複を防ぎたい場合使います。
また指定したプロパティは必須である必要があります。
例
model User {
firstname Int
lastname Int
id Int
@@unique([firstname, lastname, id])
}
@relation
リレーション関係を定義します
例
user User @relation(fields: [userId], references: [id])
userIdがとUserのidでリレーション関係があることを意味します。
@db.VarChar(n)
nに最大文字数が入る
例
name String @db.VarChar(30)
多分これくらいわかっていればなんとか開発できます。