Cái này đang hoạt động! Tôi nghĩ rằng nó được bí mật giấu trong ____10, nhưng nếu không, bạn có thể truy cập nó bằng cách sử dụng
const user = await prisma.user.create[{ data: { id: 3, firstName: "Bob", lastName: "Alice", status: "Active", }, }] console.dir[user, { depth: Infinity }]1 hoặc đợi cho đến
const user = await prisma.user.create[{ data: { id: 3, firstName: "Bob", lastName: "Alice", status: "Active", }, }] console.dir[user, { depth: Infinity }]2.
// This is your Prisma schema file, // learn more about it in the docs: //pris.ly/d/prisma-schema datasource db { provider = "mongodb" url = env["DATABASE_URL"] } generator client { provider = "prisma-client-js" previewFeatures = ["mongodb"] } model User { id Int @id @map["_id"] firstName String lastName String status Status @default[Active] } enum Status { Active Inactive }
const user = await prisma.user.create[{ data: { id: 3, firstName: "Bob", lastName: "Alice", status: "Active", }, }] console.dir[user, { depth: Infinity }]
{ id: 3, firstName: 'Bob', lastName: 'Alice', status: 'Active' }
Vì vậy, tôi đã thực hiện lược đồ này trong trường hợp đầu tiên
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "mongodb"
url = env["DATABASE_URL"]
}
model User {
id String @id @default[auto[]] @map["_id"] @db.ObjectId
email String @unique
role TipoFichaje @default[JORNADA_ENTRADA]
createdAt DateTime @db.Date
}
model Entity {
id String @id @default[auto[]] @map["_id"] @db.ObjectId
name String
createdAt DateTime @db.Date
}
enum TipoFichaje {
JORNADA_ENTRADA
JORNADA_SALIDA
DESAYUNO
COMIDA
FORMACION
FORMACION3
}
Vậy thì tôi đã đẩy DB [PRISMA DB Push--preview-Feature] và sau đó tôi đã chèn một đối tượng như thế này:
{
email: ""
role:"FORMACION3"
createdAt:1970-01-01T00:00:00.000+00:00
}
Sau đó, tôi loại bỏ enum "Formacion3" khỏi Tipofichaje và đẩy lại [PRISMA DB PUSH]
Như thế này:
enum TipoFichaje {
JORNADA_ENTRADA
JORNADA_SALIDA
DESAYUNO
COMIDA
FORMACION
}
Khi tôi cố gắng lấy dữ liệu với Prisma Studio ném lỗi này:
Message: Error in Prisma Client request:
Invalid `prisma.user.findMany[]` invocation:
Value 'FORMACION3' not found in enum 'TipoFichaje'
Query:
{
"modelName": "User",
"operation": "findMany",
"args": {
"take": 100,
"skip": 0,
"select": {
"id": true,
"email": true,
"role": true,
"createdAt": true
}
}
}
Câu hỏi của tôi là: Đó có phải là một hành vi bình thường? Ý tôi là nếu tôi di chuyển DB với những thay đổi mới không nên di chuyển sửa lỗi này? Làm thế nào tôi có thể sửa lỗi này?
Vấn đề
Các enum hiện ngăn chặn các giá trị nhất định được sử dụng, yêu cầu sử dụng
const user = await prisma.user.create[{ data: { id: 3, firstName: "Bob", lastName: "Alice", status: "Active", }, }] console.dir[user, { depth: Infinity }]3 để phản ánh chính xác những gì thực sự được lưu trữ trong cơ sở dữ liệu.
Điều này gây ra một vài vấn đề:
- Không có cơ chế do PRISMA cung cấp để truy cập giá trị cơ bản, như sẽ cần thiết nếu / khi giá trị được ánh xạ cần được truy cập / trả về / hiển thị cho người dùng.
- Có vẻ như không cần thiết, nhìn vào mã được tạo cho máy khách JavaScript/TypeScript.
ví dụ: những điều sau đây hiện không được phép:
enum Place {
1st
2nd
3rd
}
enum AddressUnitType {
"Apt."
Suite
Unit
}
Lưu ý: Các định danh Enum có không gian nhúng cũng không được phép.
Thay vào đó, họ yêu cầu sử dụng
const user = await prisma.user.create[{ data: { id: 3, firstName: "Bob", lastName: "Alice", status: "Active", }, }] console.dir[user, { depth: Infinity }]4 như thế này:
enum Place {
first @map["1st"]
second @map["2nd"]
third @map["3rd"]
}
enum AddressUnitType {
Apt @map["Apt."]
Suite
Unit
}
Ngoài ra, vì PRISMA hiện không cung cấp một cơ chế được hỗ trợ để dịch giữa các giá trị enum được ánh xạ và định danh enum, đây là một lớp dịch khác phải được cung cấp.
Giải pháp đề xuất
Cho phép các enum prisma được xác định bằng cách sử dụng các tài liệu kép kèm theo nếu cần
eg:
enum Place {
"1st"
"2nd"
"3rd"
}
enum AddressUnitType {
"Apt."
Suite
Unit
}
Điều này sẽ tránh được sự cần thiết phải sử dụng bất kỳ bản dịch nào khác của định danh cho giá trị.
Tôi tưởng tượng rằng các kiến trúc sư Prisma đang bị hạn chế ở đây và muốn lấy 'mẫu số chung thấp nhất', do đó, nếu họ muốn thêm các trình tạo cho các ngôn ngữ khác, đặc biệt có những hạn chế tương tự như những gì Prisma hiện đang áp đặt.
Có lẽ trong trường hợp đó, khi dự án được biết là chỉ cần tạo máy khách JavaScript/TypeScript, cần có một tùy chọn cấu hình có thể được đặt để chỉ ra việc thư giãn các hạn chế giá trị Enum, do những hạn chế đó sẽ không bao giờ gặp phải.