Jump to content

Prisma

Prisma to ORM dla TypeScripta, który pozwala na definiowanie schematu bazy danych i modeli w pliku schema.prisma, a następnie generuje klikenta będącego typesafe, którego wykorzystasz w interakcjach z bazą danych ze swojego backendu.

Prisma Client

Zlokalizowany w pliku src/server/db.ts, Prisma Client to globalna zmienna (tak jak rekomendowane na stronie z najlepszymi sposobami przez zespół Prismy) wyeksportowana i gotowa do użycia w twoich route’ach API. Prisma Client dołączany jest przez nas w kontekście tRPC. Polecamy tą metodę, zamiast importowania go osobno w każdym pliku.

Schema (Schemat)

Znajdziesz schemat Prismy w pliku /prisma/schema.prisma. Plik ten to miejsce, gdzie definiuje się schemat bazy danych i modele. Jest on także wykorzystywany podczas generowania Prisma Clienta.

Z NextAuth.js

Jeżeli wybierzesz NextAuth.js w połączeniu z Prismą, plik shcematu generowany jest wraz z rekomendowanymi wartościami dla modeli User, Session, Account, czy też VerificationToken - tak jak opisano to w dokumentacji NextAuth.js.

Domyślna Baza Danych

Domyślna baza danych to baza SQLite, która jest znakomita do szybkiego pisania aplikacji, takich jak “weryfikacja konceptu” (“proof-of-concept”), lecz nie jest ona polecana do pisania produkcyjnych wersji projektów. Typ bazy danych zmienić możesz poprzez edycję pola provider w bloku database, na postgresql lub mysql. Następnie, aktualizując string połączenia z bazą w pliku .env na taki, który skieruje Prismę do twojej bazy danych.

Seedowanie Bazy Danych

Seedowanie bazy danych to dobry sposób na szybkie uzupełnienie bazy danych testową zawartością. Aby rozpocząć seedowanie, będziesz musiał stworzyć plik seed.ts w folderze /prisma, a następnie dodać skrypt seed do pliku package.json. Będziesz musiał także skorzystać z jakiegoś środowiska uruchomieniowego dla TypeScripta. Polecamy tsx, który jest bardzo szybkim środowiskiem korzystającym z esbuilda i niewymagającym żadnej konfiguracji ESM. Runnery, takie jak ts-node, także zadziałają.

package.json
{
  "scripts": {
    "db-seed": "NODE_ENV=development prisma db seed"
  },
  "prisma": {
    "seed": "tsx prisma/seed.ts"
  }
}
prisma/seed.ts
import { prisma } from "../src/server/db/client";

async function main() {
  const id = "cl9ebqhxk00003b600tymydho";
  await prisma.example.upsert({
    where: {
      id,
    },
    create: {
      id,
    },
    update: {},
  });
}

main()
  .then(async () => {
    await prisma.$disconnect();
  })
  .catch(async (e) => {
    console.error(e);
    await prisma.$disconnect();
    process.exit(1);
  });

Następnie uruchom po prostu pnpm db-seed (lub npm/yarn) aby wykonać seedowanie bazy danych.

Przydatne Zasoby

ZasóbLink
Dokumentacja Prismyhttps://www.prisma.io/docs/
GitHub Prismyhttps://github.com/prisma/prisma
Prisma Migrate Playgroundhttps://playground.prisma.io/guides
Adapter NextAuth.JS dla Prismyhttps://next-auth.js.org/adapters/prisma
Poradnik Połączenia z PlanetScalehttps://www.prisma.io/docs/getting-started/setup-prisma/add-to-existing-project/relational-databases/connect-your-database-typescript-planetscale