sql - Kuinka jakaa Prisma-malli erilliseen tiedostoon?


Opettelen Prisma ORM:ää videoharjoitusten ja virallisten dokumenttien avulla. Ne selittävät ja kirjoittavat kaiken mallikoodin yhteen tiedostoon nimeltä schema.prisma. Se on ok, mutta kun sovellus kasvaa, siitä tulee sekavaa. Joten, kuinka minun pitäisi erottaa mallimääritelmäni erillisiin tiedostoihin?

Vastaus #1

Tällä hetkellä Prisma ei tue tiedostojen segmentointia. Voin kuitenkin suositella kolmea ratkaisua.

Vaihtoehto 1: Prismix

Prismix hyödyntää malleja ja enum-arvoja luodakseen suhteita tiedostojen välillä Prisma-skeemallesi Prismix-konfiguraatiotiedoston kautta.

{
  "mixers": [
    {
        "input": [
            "base.prisma",
            "./modules/auth/auth.prisma", 
            "./modules/posts/posts.prisma",
        ],
        "output": "prisma/schema.prisma"
    }
  ]
}

Tämän sijoittaminen prismix.config.json-tiedostoon, joka määrittelee, kuinka haluat yhdistää Prisma-segmenttisi.

Vaihtoehto 2: Schemix

Schemix käyttää Typescript-konfiguraatioita käsittelemään skeeman segmentointia.

Esimerkiksi:

// _schema.ts
import { createSchema } from "schemix";

export const PrismaSchema = createSchema({
  datasource: {
    provider: "postgresql",
    url: {
      env: "DATABASE_URL"
    },
  },
  generator: {
    provider: "prisma-client-js",
  },
});

export const UserModel = PrismaSchema.createModel("User");

import "./models/User.model";

PrismaSchema.export("./", "schema");

User.modelin sisällä

// models/User.model.ts

import { UserModel, PostModel, PostTypeEnum } from "../_schema";

UserModel
  .string("id", { id: true, default: { uuid: true } })
  .int("registrantNumber", { default: { autoincrement: true } })
  .boolean("isBanned", { default: false })
  .relation("posts", PostModel, { list: true })
  .raw('@@map("service_user")');

Tämä luo sitten prisma/schema.prisma-tiedostosi, joka sisältää koko skeemasi. Käytin esimerkkinä vain yhtä tietokantaa (otettu dokumentaatiosta), mutta sinun pitäisi ymmärtää pointti.

Vaihtoehto 3: Kissa -> Luo

Jaa skeemasi osatiedostonimiin ja suorita:

cat *.part.prisma > schema.prisma
yarn prisma generate

Suurin osa näistä, ellei kaikki, on mainittu täällä nykyisessä avoimessa asiassa liittyen tuen saamiseen Prisma-skeem tiedoston segmentoinnille https://github.com/prisma/prisma/issues/2377

Vastaus #2

Aloittaen Prisma 5.15, tämä voidaan tehdä ilman ulkoisia työkaluja, katso seuraava blogikirjoitus.

Esimerkkiprojekti

Lyhyesti sanottuna, sinun tarvitsee tehdä vain:

  1. Varmista, että schema.prisma-tiedostossasi tämä ominaisuus on otettu käyttöön seuraavasti:

    generator client {
      provider        = "prisma-client-js"
      previewFeatures = ["prismaSchemaFolder"]
    }
    
  2. Luo hakemisto nimeltä schema prisma-hakemistosi alle

  3. Siirrä schema.prisma-tiedostosi siihen kansioon. Nyt sinun pitäisi pystyä luomaan lisää .prisma-tiedostoja sinne ja määrittelemään mallejaasi. Kaikki yhdistyy automaattisesti, mitään ei tarvitse tuoda erikseen.

Aiheeseen liittyviä artikkeleita