javascript - NodeJs Prisma ორჯერ ჩართვა თვისება


ჩემი პროექტში 3 მოდელის სქემა მაქვს:

  1. გაყიდვების სფერო: აიდი + სახელი

  2. ელემენტები: id + სახელი + მწარმოებლის Id

  3. კატეგორიები: ID + სახელი + ნივთის ID

მჭირდება შევქმნა Prisma კითხვის სქემა, რომელიც საშუალებას მომცემს მივიღო კატეგორიები, მათ შორის ნივთის და ვენდორის დეტალები.

პრიზმის მოდელები:

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")
}   

ექსპრეს ენდპოინტი არის შემდეგი:

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);
    }

});

აპი არსებულ კოდში, ის დააბრუნებს კატეგორიების სიას თითოეული კატეგორიის ნივთებთან ერთად, თუმცა, ნივთი შეიცავს vendorId-ს, vendor-ის დეტალების ნაცვლად. რა უნდა ვუმატო კოდს, რათა მივიღო vendor-ის დეტალები foreach loop-ის გარეშე?

პასუხი #1

შეგიძლიათ მიიღოთ მომწოდებლები ერთად საქონელთან კატეგორიის მიღებისას ამ კვანძის გამოყენებით.

  let items = await prisma.category.findMany({
    include: {
      item: {
        include: {
          vendor: true,
        },
      },
    },
  });

  console.log(items);

აქ არის პასუხის ნიმუში კითხვისთვის:

[
  {
    "id": 1,
    "name": "mobile",
    "itemId": 1,
    "item": {
      "id": 1,
      "name": "Iphone",
      "vendorId": 1,
      "vendor": {
        "id": 1,
        "name": "Apple Inc"
      }
    }
  }
]