Prisma
By Tomás Hernández, Posted on January 7, 2024 (1y ago)
Este artículo está incompleto y puede contener errores.
Comandos Útiles
- yarn add -D prisma
- yarn add @prisma/client
- npx prisma init -> Crea la carpeta de prisma en el root del proyecto
- npx prisma format -> Nos dice los posibles errores y los corrige en caso de ser posible.
- npx prisma generate
- npx prisma db push
Inicializar la DB y usar Prisma
Usar los comandos 1 y 2.
Configurar las .env
Debe de existir una variable que sea DATABASE_URL, normalmente es de la forma "POSTGRESQL://user:password@host/database?params"
Generar el archivo de schema.prisma
Usar el comando 3.
Configurar el archivo de schema.prisma
Elegir el provider a utilizar "mysql" | "postgres" ...
Ejemplo de archivo de Prisma
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
}
model User {
id String @id @default(cuid())
name String
email String @unique
emailVerified DateTime?
image String?
accounts Account[]
createdAt DateTime @default(now())
}
model Account {
id String @id @default(cuid())
userId String @unique
providerType String
providerId String
providerAccountId String
refreshToken String?
accessToken String?
accessTokenExpires DateTime?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
user User @relation(fields: [userId], references: [id])
@@unique([providerId, providerAccountId])
}
Preparar el Schema y subirlo a la base de datos
Usar los comandos 4, 5 y 6.
Solucionar error "foreign key constraints are not allowed"
Esto suele suceder si estás utilizando PlanetScale. Para poder solucionarlo, hay que agregar 'relationMode = "prisma"' al objeto de datasource db, es decir, quedaría algo así:
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
relationMode = "prisma"
}
"PlanetScale does not allow foreign keys in its database schema. By default, Prisma uses foreign keys in the underlying database to enforce relations between fields in your Prisma schema. In Prisma versions 3.1.1 and later, you can emulate relations in Prisma Client with the prisma relation mode, which avoids the need for foreign keys in the database.
To enable emulation of relations in Prisma Client, set the relationMode field to "prisma" in the datasource block" Fuente: https://www.prisma.io/docs/orm/overview/databases/planetscale#differences-to-consider
Entonces, para poder dejar bien armado el modelo con Foreign Keys hay que crear los índices manualmente colocando @unique.
Solucionar error PrismaClientInitializationError
Colocar en el objeto de scripts en package.json el siguiente script: "postinstall": "prisma generate"
De manera que debería quedar algo así:
"scripts": {
...otros_scripts,
"postinstall": "prisma generate"
},