1 min read

`model`s en Prisma

@@map

Contexte Convention Exemple
Prisma models Forme singulière — PascalCase Formula
Base de données relationnelle (table) Forme plurielle — snake_case formulas
model Formula {
  // Fields

  @@map("formulas")
}

@@map mappe ensemble Prisma model Formulaavec la table formulas dans la base de données, permettant le conformement à deux conventions contradictoires.

model

champs scalar

Une liste complète des scalars : ici

clé (ID)

model User {

//option 1 : autoincrement - 1,2,3...
  id      Int      @id @default(autoincrement()) 
//

  email   String   @unique
  name    String?
  role    Role     @default(USER)
  posts   Post[]
  profile Profile?
  registrationTime DateTime @default(now())
//option 2 : composite ID
  @@id(name: "fullName", fields: [firstName, lastName])
//
}

En absence d'option 1 ou 2, champs @unique peuvent servir comme id.

@unique

model Post {
  id         String     @id @default(auto()) @map("_id") @db.ObjectId
  createdAt  DateTime   @default(now())
  title      String
  published  Boolean    @default(false)
  author     User       @relation(fields: [authorId], references: [id])
  authorId   String     @db.ObjectId
  categories Category[] @relation(references: [id])

  @@unique(name: "authorTitle", [authorId, title]) // chaque combinaison de "authorID" et "title" doit être unique. Autrement dit chaque author ne peut pas avoir deux Post avec le même titre.
}

Il est aussi possible d'étendre la contrainte aux autres models :

type City {
  name String
}

type Address {
  number Int
  city   City
}

model User {
  id      Int       @id
  address Address[]

  @@unique([address.city.name])
}

Index

Index est utile pour accélerer les recherches habituels

model Post {
  id      Int     @id @default(autoincrement())
  title   String
  content String?

  @@index([title, content])
}

Composite types

model Product {
  id     String  @id @default(auto()) @map("_id") @db.ObjectId
  name   String
  photos Photo[]
}

type Photo {
  height Int
  width  Int
  url    String
}

Notez que certains types ne sont pas disponible en "composite types" : @unique @@index @id @relation @ignore @updatedAt.

@unique @@index peuvent être défini en model parent. Dans l'exemple, Product.

Functions

model Post {
  id        Int      @id @default(autoincrement())
  createdAt DateTime @default(now())
}