yarn prisma studio # start GUI
yarn prisma init --datasource-provider mysql # create prisma/schema.prisma
yarn prisma db pull # pull schema
yarn prisma db push # push schema
# run prisma.seed in package.json, use --transpile-only to skip typecheck and save RAM
yarn prisma db seed
yarn prisma generate # gen ts w/ generator, ex prisma-client-js provider
# migrate dev/reset will trigger seed unless `--skip-seed`
yarn prisma migrate dev --name init # a commit nammed "init"generator client {
previewFeatures = ["referentialIntegrity"]
}
datasource db {
referentialIntegrity = "prisma"
}modal name -> singular PascalCase -> User
"[prisma]": {
"editor.defaultFormatter": "Prisma.prisma"
}- Post[] -> many
- String? -> optional
findUnique, findFirst, findMany
where, distinct, take 2, skip 1, orderBy,
model User {
userSettingsId String @unique
userSettings UserSettings @relation(
fields: [userSettingsId], // one-to-one -> ForeignKey userSettingsId in this table
references: [id], // UserSettings id field
)
}
model UserSettings {
id String @id
userId String @unique
User User?
}model User {
posts Post[]
}
model Post {
authorId String
author User @relation(fields: [authorId], references: [id]) // one-to-many -> ForeignKey authorId created in this table
}model User {
likedPosts Post[] @relation("LikedPosts")
}
model Post {
likedBy User[] @relation("LikedPosts") // many-to-many -> create join table & 2 Foreign Keys for each table
}or
model UserLikedPost {
userId String
postId Int
user User @relation(fields: [userId], references: [id])
post Post @relation(fields: [postId], references: [id])
@@id([postId, userId]) // composed ID
}
model Post { likedBy UserLikedPost[] }
model User { likedPosts UserLikedPost[] }// del UserSettings when User is deleted
user User @relation(fields: [userId], references: [id], onDelete: Cascade)// Composite ID
// default name firstName_lastName, renamed to fullName
@@id([firstName, lastName], name: "fullName")@@unique([A, B], map: "_LinkToUser_AB_unique)
@@index([B], map: "_LinkeToUser_B_index")
email String @map("commenter_email") // change default column name
@@map("_LinkToUser") // change default table name// @unique, @@unique, @@index, @id, @@id
xxx Int @unique(sort: Desc)
@@unique([unique_1(sort: Desc), unique_2])// = and <> faster than default BTree
@@index([value], type: Hash)