如何填充已填充关系的关系?

How to populate relation of already populated relation?

我选择了 prisma2 作为我新项目的 ORM。

我运行考虑一个,我怎么加载关系关系?

例如我有这样的table定义:

model Brand {
  id      Int     @id @default(autoincrement())
  name    String  @unique
  addedBy User    @relation(fields: [userId], references: [id])
  userId  Int
  models  Model[]
}

model Model {
  id      Int    @id @default(autoincrement())
  name    String
  addedBy User   @relation(fields: [userId], references: [id])
  userId  Int
  Brand   Brand? @relation(fields: [brandId], references: [id])
  brandId Int?
  Car     Car[]
}

model Car {
  id                           Int      @id @default(autoincrement())
  plateCode                    String
  vinCode                      String   @unique
  addedBy                      User     @relation(fields: [userId], references: [id])
  userId                       Int
  ownedByCompany               Company  @relation(fields: [companyId], references: [id])
  companyId                    Int
  model                        Model    @relation(fields: [modelId], references: [id])
  modelId                      Int
  year                         Int
  acquiredDate                 DateTime
  insuranceValidFrom           DateTime
  insuranceExpiresOn           DateTime
  technicalInspectionValidFrom DateTime
  technicalInspectionExpiresOn DateTime
}

当我想要检索我的数据时,我收到了这样的回复:

[
    {
        "id": 1,
        "plateCode": "XXQ:000",
        "vinCode": "ZXQQQQQQQQQQQQQQQQQQQ",
        "userId": 1,
        "companyId": 1,
        "modelId": 1,
        "year": 2004,
        "acquiredDate": "2021-12-15T21:02:57.206Z",
        "insuranceValidFrom": "2020-02-01T21:02:57.206Z",
        "insuranceExpiresOn": "2023-02-01T21:02:57.206Z",
        "technicalInspectionValidFrom": "2021-06-25T21:02:57.206Z",
        "technicalInspectionExpiresOn": "2023-06-25T21:02:57.206Z",
        "model": {
            "id": 1,
            "name": "525i",
            "userId": 1,
            "brandId": 1
        }
    }
]

有没有办法以类似的方式用 include 对象填充 brandId? 或者我可以在模式定义中定义虚拟/计算字段?

我知道我可以通过第二次调用 db 来转换/填充该字段,但我只是在想是否有一种方便的方法来做到这一点。 任何帮助,将不胜感激。 :)

只需对每个关系使用 include,例如:

  prisma.car.findMany({
    include: {
      model: {
        include: {
          Brand: true,
        },
      },
    },
  });

More info in the docs

如果你只想要一些字段,而不是全部,那么你可以用同样的方式使用select。虽然不能混用。

注意:您的 Brand 字段以大写字母开头,您可能需要修复它以使其保持一致