abeshi blog
カテゴリーで検索

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)




多分これくらいわかっていればなんとか開発できます。