javascript - NodeJs Prisma dubbel inkludera egenskap
Jag har 3 modelscheman i mitt projekt:
Säljare: id + namn
Objekt: id + namn + leverantörId
kategorier: id + namn + ItemId
Jag behöver skapa ett Prisma-frågeschema som gör det möjligt för mig att hämta kategorier inklusive detaljer om objektet och leverantören.
prisma-modellerna:
model Vendor {
id Int @id @default(autoincrement())
name String @db.VarChar(255)
Item Item[]
@@map("Vendors")
}
model Item {
id Int @id @default(autoincrement())
name String @db.VarChar(255)
vendor Vendor @relation(fields: [vendorId], references: [id])
vendorId Int
Category Category[]
@@map("Items")
}
model Category {
id Int @id @default(autoincrement())
name String @db.VarChar(255)
item Item @relation(fields: [itemId], references: [id])
itemId Int
@@map("Categories")
}
Express-slutpunkten är som följer:
router.get('', async (req, res) => {
try {
let items = await prisma.Category.findMany({
include: {
item: true
},
});
res.status(200).json(items)
} catch (error) {
res.json(error.message);
}
});
Koden som den är nu kommer den att returnera en lista över kategorier tillsammans med objekten i varje kategori, men objektet kommer att inkludera vendorId istället för leverantörsdetaljer. Vad ska jag lägga till i koden för att få leverantörsdetaljer utan foreach-loopen
Svar #1
Du kan få leverantörer tillsammans med artiklar när du hämtar kategori genom denna fråga.
let items = await prisma.category.findMany({
include: {
item: {
include: {
vendor: true,
},
},
},
});
console.log(items);
Här är exempel på svar för frågan:
[
{
"id": 1,
"name": "mobile",
"itemId": 1,
"item": {
"id": 1,
"name": "Iphone",
"vendorId": 1,
"vendor": {
"id": 1,
"name": "Apple Inc"
}
}
}
]
