Sprytne Okazje — promocje, kody rabatowe i wyprzedaże

Generator modelu Prisma

Wpisz pola, a dostaniesz gotowy model do schema.prisma z sekcją datasource i listą błędów do poprawienia.

Bezpieczne (SSL)
Przetwarzanie Lokalne
100% Darmowe
Instrukcja
  • 1
    Wprowadź dane
    Wpisz treść, wklej tekst lub załaduj plik z dysku.
  • 2
    Kliknij przycisk
    Narzędzie natychmiast przetworzy Twoje dane w przeglądarce.
  • 3
    Pobierz wynik
    Skopiuj gotowy tekst lub zapisz plik na urządzeniu.
function runTool() {
  return "Wynik gotowy w 0.1s";
}
Przykład:
Opcje

schema.prisma

generator client { provider = "prisma-client-js" } datasource db { provider = "postgresql" url = env("DATABASE_URL") } model User { id Int @id @default(autoincrement()) email String @unique name String? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt }
316 znaków · 36 słów · 17 linii

Pola

5

Opcjonalne

1

Pola z znakiem ?

Typy własne

0

Relacje i enumy

Uwagi

0
OK
Rozpoznane pola
PoleTypWymagalnośćAtrybuty
id Int wymagane @id @default(autoincrement())
email String wymagane @unique
name String? opcjonalne —
createdAt DateTime wymagane @default(now())
updatedAt DateTime wymagane @updatedAt

Ściąga: typy skalarne Prisma

Typy pól w schema.prisma
TypCo przechowujePrzykład
String Tekst name String
Boolean Prawda / fałsz published Boolean @default(false)
Int Liczba całkowita stock Int @default(0)
BigInt Duża liczba całkowita (64-bitowa) views BigInt
Float Liczba zmiennoprzecinkowa rating Float
Decimal Dokładna liczba dziesiętna (np. ceny) price Decimal
DateTime Data i czas createdAt DateTime @default(now())
Json Dane w formacie JSON settings Json
Bytes Dane binarne avatar Bytes

Ściąga: najczęstsze atrybuty

Atrybuty pól i modeli
AtrybutZnaczeniePrzykład
@id Klucz główny id Int @id
@default(...) Wartość domyślna, np. autoincrement(), uuid(), now() id String @id @default(uuid())
@unique Wartość nie może się powtórzyć email String @unique
@updatedAt Czas ostatniej zmiany ustawiany automatycznie (DateTime) updatedAt DateTime @updatedAt
@map("nazwa") Inna nazwa kolumny w bazie createdAt DateTime @map("created_at")
@relation(...) Powiązanie z innym modelem author User @relation(fields: [authorId], references: [id])
@@index([pole]) Indeks przyspieszający wyszukiwanie @@index([email])
@@unique([a, b]) Unikalna kombinacja pól @@unique([userId, postId])
@@id([a, b]) Klucz główny złożony z kilku pól @@id([userId, postId])
@@map("tabela") Inna nazwa tabeli w bazie @@map("users")

Jak zapisać pole

Jedno pole w linii: nazwa Typ atrybuty. Dwukropek po nazwie też działa (email: String). Znak ? po typie oznacza pole opcjonalne (String?), a [] listę (String[]). Atrybuty zaczynają się od @, np. @unique. Linie zaczynające się od // trafiają do modelu jako komentarze.

Atrybuty całego modelu

Linie zaczynające się od @@ (np. @@index([email]) albo @@unique([a, b])) trafiają na koniec modelu. Pole „Nazwa tabeli w bazie” samo dodaje @@map("nazwa"), jeśli nie wpisano go ręcznie.

Po wygenerowaniu

Wklej wynik do pliku prisma/schema.prisma. Polecenie npx prisma validate sprawdzi składnię, npx prisma format uporządkuje plik, a npx prisma migrate dev utworzy migrację. Zmienna DATABASE_URL musi być ustawiona w pliku .env.

MongoDB

W MongoDB identyfikator zwykle zapisuje się jako: id String @id @default(auto()) @map("_id") @db.ObjectId. Zapis autoincrement() jest tam niedostępny.

Oceń to narzędzie:

Powiązane narzędzia

Inne narzędzia, które mogą Ci się przydać

Co robi generator modelu Prisma

Prisma to ORM dla Node.js i TypeScript. Model w pliku schema.prisma opisuje tabelę (w MongoDB kolekcję) i jej kolumny, a Prisma generuje z niego typowany klient i migracje. Generator modelu Prisma zamienia listę pól wpisaną w formacie nazwa Typ atrybuty na gotowy blok model, opcjonalnie poprzedzony sekcjami generator i datasource, i wypisuje uwagi o typowych błędach, np. braku identyfikatora.

Budowa modelu

ZapisZnaczenie
@idklucz główny
@default(...)wartość domyślna, np. autoincrement(), uuid(), now()
@uniquewartość unikalna
@updatedAtautomatyczna data modyfikacji (tylko typ DateTime)
@map("nazwa")inna nazwa kolumny w bazie
? po typiepole opcjonalne (nullable)
[] po typielista wartości albo druga strona relacji

Przykład

Dane startowe narzędzia (przycisk „Przywróć przykład”) dają taki model User:

model User {
  id Int @id @default(autoincrement())
  email String @unique
  name String?
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
}

Sekcja generator i datasource

Przy zaznaczonej opcji „Dodaj generator i datasource” (domyślnie włączona) wynik zaczyna się od dwóch bloków:

generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "postgresql"
  url = env("DATABASE_URL")
}

Wartość provider wybierasz z listy: postgresql, mysql, sqlite, sqlserver, mongodb lub cockroachdb. Adres bazy jest zawsze odczytywany ze zmiennej DATABASE_URL, którą ustawiasz w pliku .env. Jeśli dopisujesz model do istniejącego schematu, odznacz tę opcję: plik może mieć tylko jeden blok datasource.

Migracje

npx prisma validate sprawdza składnię schematu, npx prisma format porządkuje wcięcia. npx prisma migrate dev --name init tworzy i stosuje migrację na podstawie schematu, a npx prisma generate odświeża typowanego klienta.

Jak działa generator modelu Prisma

Narzędzie nie łączy się z bazą danych, nie czyta projektu Node.js i nie zna Twojego istniejącego pliku schema.prisma. Pracuje wyłącznie na tym, co wpiszesz: nazwie modelu, liście pól (jedno w linii), wybranym dostawcy bazy i opcjonalnej nazwie tabeli. Z tych danych składa tekst w składni Prisma: nagłówek modelu, po jednej linii na każde pole w kolejności wpisania, atrybuty całego modelu i nawias zamykający.

Każda linia ma postać nazwa Typ atrybuty. Dwukropek po nazwie (email: String) też jest akceptowany i znika z wyniku. Znak ? po typie oznacza pole opcjonalne, [] listę, a atrybuty muszą zaczynać się od @. Linie zaczynające się od // trafiają do modelu jako komentarze, a linie od @@ (np. @@index([email])) lądują na końcu bloku. Typy wpisane małymi literami narzędzie poprawia (string → String, bool → Boolean, integer → Int), bo Prisma rozróżnia wielkość liter. Typ spoza listy typów skalarnych, np. Post albo Role, jest traktowany jako model lub enum, który musi istnieć w schemacie.

Linie, których nie da się rozpoznać (brak typu, nazwa zaczynająca się cyfrą, atrybut bez @, powtórzona nazwa pola), są pomijane, a pod wynikiem pojawia się uwaga z numerem linii. Lista pól może mieć do 100 linii i 6000 znaków. Nazwa modelu ma najwyżej 60 znaków, zaczyna się od litery i zawiera tylko litery, cyfry oraz znak _.

Generator nie zmienia wielkości liter w nazwach, tylko podpowiada, że modele pisze się zwyczajowo w PascalCase (User, nie user). Kolejność bloków w pliku schema.prisma nie ma znaczenia, ale nazwy modeli muszą być unikalne w całym schemacie.

Co sprawdza narzędzie

  • czy model ma identyfikator: pole z @id lub @unique albo wpis @@id / @@unique,
  • czy pole z @id nie jest opcjonalne,
  • czy @updatedAt stoi przy polu typu DateTime,
  • czy przy MongoDB nie użyto autoincrement() (podpowiada zapis z @default(auto()) @map("_id") @db.ObjectId),
  • czy listy typów prostych, np. String[], nie trafiły do MySQL, SQLite lub SQL Server; obsługują je PostgreSQL, CockroachDB i MongoDB.

Przykład krok po kroku: model Post

  1. W polu „Nazwa modelu” wpisujesz Post. Prisma nie tworzy liczby mnogiej: bez @@map tabela też będzie się nazywać Post.
  2. W polu „Pola” wpisujesz sześć linii: id Int @id @default(autoincrement()), title String, slug String @unique, body String?, published Boolean @default(false) i createdAt DateTime @default(now()).
  3. Pole slug służy do adresów URL i dzięki @unique nie może się powtarzać między rekordami. Znak zapytania przy body oznacza kolumnę, która dopuszcza wartość pustą.
  4. Pole published ma wartość domyślną false, więc nowy rekord startuje jako nieopublikowany, a createdAt wypełnia się czasem utworzenia rekordu.
  5. W opcjach wpisujesz nazwę tabeli posts. Narzędzie samo dopisze na końcu modelu @@map("posts").

Po kliknięciu „Generuj model” dostajesz (pomijając sekcje generator i datasource):

model Post {
  id Int @id @default(autoincrement())
  title String
  slug String @unique
  body String?
  published Boolean @default(false)
  createdAt DateTime @default(now())

  @@map("posts")
}

Blok ma 10 linii: nagłówek, sześć pól, pustą linię, @@map i nawias zamykający. Kafelki pokażą 6 pól, 1 opcjonalne, 0 typów własnych i 0 uwag. Gdyby zabrakło linii z id, narzędzie nie zgłosi braku identyfikatora, bo slug ma @unique, co Prisma też akceptuje; klucz główny i tak warto mieć.

Elementy schematu, które warto znać

ElementZapis w schema.prismaDo czego służy
TekstStringPola tekstowe o zmiennej długości, nazwy, opisy, adresy
Liczba całkowitaInt lub BigIntLiczniki, identyfikatory, wartości przekraczające zakres Int
Liczba zmiennoprzecinkowaFloat lub DecimalPomiary oraz kwoty pieniężne, gdzie Decimal daje dokładny wynik bez błędów zaokrągleń
Data i czasDateTimeZnaczniki utworzenia, publikacji i modyfikacji rekordu
Wartość logicznaBooleanFlagi włączone i wyłączone, np. widoczność wpisu
Dane bez sztywnej strukturyJsonMetadane, konfiguracja lub odpowiedź z zewnętrznego API
Dane binarneBytesMałe pliki, skróty, klucze w postaci bajtów
Lista wartościTyp z [] na końcuWiele wartości w jednym polu, np. tagi; typy proste tylko w PostgreSQL, CockroachDB i MongoDB
Indeks i unikalność modelu@@index oraz @@uniquePrzyspieszenie filtrowania i klucze złożone z kilku kolumn
Mapowanie nazw@@map oraz @mapZgodność z konwencją snake_case w istniejącej bazie

Praktyczne wskazówki

  • Nazywaj modele rzeczownikiem w liczbie pojedynczej: Post, a nie Posts. Prisma nie zmienia liczby przy mapowaniu na tabelę, więc jeśli tabela ma się nazywać posts, wpisz to w polu „Nazwa tabeli w bazie”.
  • Ustal konwencję nazw przed pierwszym modelem. Jeśli baza używa snake_case, dodaj @map("created_at") przy polach od razu, zamiast poprawiać kilkadziesiąt pól później.
  • Dodawaj indeksy razem z polami, po których filtrujesz. Pole, które w zapytaniach trafia do warunku WHERE lub do sortowania, powinno mieć wpis @@index([pole]) na poziomie modelu.
  • Przemyśl opcjonalność od początku. Dodanie wymaganego pola do tabeli, która już ma dane, zwykle wymaga wartości domyślnej albo ręcznej migracji z uzupełnieniem istniejących rekordów.
  • Trzymaj plik schema.prisma w repozytorium i przeglądaj jego zmiany jak zwykły kod źródłowy.

Czego narzędzie nie uwzględnia

  • Sprawdza format nazw i powtórzenia pól w obrębie modelu, ale nie wie, czy nazwa modelu nie koliduje ze słowem zarezerwowanym Prisma albo z modelem w Twoim schemacie. Wychwyci to dopiero prisma validate.
  • Pole relacji z @relation możesz wpisać sam (gotowy przykład daje przycisk „Comment (relacja)”), ale drugą stronę relacji w modelu docelowym musisz dopisać ręcznie.
  • Nie tworzy bloków enum ani kilku modeli naraz. Każdy typ własny użyty w polach musi już istnieć w schemacie.
  • Nie porównuje wyniku z rzeczywistą strukturą tabel, nie importuje schematu i nie wykryje rozjazdu między modelem a stanem bazy. Do tego służy npx prisma db pull.
  • Nie generuje migracji, seedów ani klienta. Polecenia migracyjne i generujące uruchamiasz w projekcie po zapisaniu pliku.
  • Sekcje nagłówkowe mają klasyczną postać (prisma-client-js, url = env("DATABASE_URL")). W nowszych wersjach Prisma część konfiguracji przeniesiono do pliku prisma.config.ts, dlatego sprawdź je z dokumentacją wersji, której używasz.

Najczęstsze pytania

Jak dodać relację w modelu Prisma?

Dodaj pole klucza obcego i pole relacji, np. postId Int oraz post Post @relation(fields: [postId], references: [id]). W modelu Post dopisz drugą stronę: comments Comment[].

Którego dostawcę bazy wybrać?

PostgreSQL sprawdza się w większości aplikacji, SQLite w prototypach i testach, MongoDB przy danych dokumentowych. W MongoDB identyfikator zapisuje się jako id String @id @default(auto()) @map("_id") @db.ObjectId.

Czy mogę wygenerować kilka modeli naraz?

Nie, jedno uruchomienie daje jeden model. Generuj modele po kolei, a przy drugim i kolejnym odznacz „Dodaj generator i datasource”, żeby nie powielić tych sekcji w pliku.

Jak wkleić wynik do istniejącego schematu?

Skopiuj blok modelu przyciskiem „Kopiuj schemat” i wstaw go na końcu pliku schema.prisma. Potem uruchom npx prisma validate i dopiero wtedy generuj klienta lub migrację.

Czy generator obsługuje enumy i listy?

Listy tak: wpisz [] po typie, np. tags String[]. Enum musisz zadeklarować osobno jako blok enum Role { USER ADMIN }, a w modelu użyć go jak typu, np. role Role @default(USER).

Jak zrobić klucz główny złożony z dwóch kolumn?

Wpisz w liście pól osobną linię @@id([userId, postId]). Narzędzie umieści ją na końcu modelu i uzna za identyfikator.

Zainstaluj Webp.pl Miej narzędzia we własnej kieszeni!