簡體   English   中英

使用 prisma 客戶端在 typescript 中從父級引用子 model

[英]References a sub model from parent in typescript using prisma client

我正在學習 prisma,如果返回的數據包含子 model,我無法弄清楚如何正確使用 prisma 類型。

比如我有下面兩張表

model Services {
    id  Int @id @default(autoincrement())
    service_name String @db.VarChar(255)
    description String @db.MediumText
    overall_status ServiceStatus @default(OPERATIONAL)
    deleted Boolean @default(false)
    sub_services  SubServices[]
}

model SubServices {
  id Int @id @default(autoincrement())
  name  String @db.VarChar(255)
  description String @db.MediumText
  current_status ServiceStatus @default(OPERATIONAL)
  service Services?  @relation(fields: [service_id], references: [id], onDelete: Cascade)
  service_id  Int?
}

然后我使用以下方法從服務 model 中提取數據:

const services = await prisma.services.findMany({
    where: {
        deleted: false
    },
    include: {
        sub_services: true
    }
});

然后我在客戶端引用Services model,但 IDE 沒有檢測到Services可以包含sub_services 我可以使用它並且它可以工作但是 IDE 總是顯示一條波浪線,好像代碼是錯誤的,示例如下:

import {Services} from "@prisma/client";

const MyComponent : React.FC<{service: Services}> = ({services}) => {
    return (
       <>
       service.sub_services.map(service => {
       })
       </>
    )
}

但在上面的示例中,sub_services 帶有下划線並帶有錯誤TS2339: Property 'sub_services' does not exist on type 'Services'.

那么我如何以 IDE 可以看到我可以從services model 中訪問sub_services的方式輸入它。

更新

我找到了一種方法來做到這一點,但我不確定這是否是正確的方法,因為我正在創建一個新類型,如下所示:

type ServiceWithSubServices <Services> = Partial<Services> & {
    sub_services: SubServices[]
}

然后將 const 定義更改為以下內容

const ServiceParent : React.FC<{service: ServiceWithSubServices<Services>}> = ({service}) => {

雖然這似乎確實有效,但這是正確的方法嗎,或者是否有一些更具體的棱鏡可以在不創建新類型的情況下做到這一點。

在 Prisma 中,默認情況下只有標量字段包含在生成的類型中。 因此,對於Services類型,除sub_services之外的所有標量字段都將包含在該類型中。 sub_services不包括在內,因為它是一個關系字段。

要包含關系字段,您需要使用 Prisma.validator,這是生成包含關系字段的類型的指南

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM