如何填充已填充关系的关系?
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,
},
},
},
});
如果你只想要一些字段,而不是全部,那么你可以用同样的方式使用select
。虽然不能混用。
注意:您的 Brand
字段以大写字母开头,您可能需要修复它以使其保持一致
我选择了 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,
},
},
},
});
如果你只想要一些字段,而不是全部,那么你可以用同样的方式使用select
。虽然不能混用。
注意:您的 Brand
字段以大写字母开头,您可能需要修复它以使其保持一致