создать призму «многие ко многим», и одно из полей взято из другой таблицы

У меня есть схема-призма с продуктами, заказами и отношением «многие ко многим» между ними. Я хочу сохранить цену продукта в таблице связей, поскольку цена продукта может измениться в любое время, и при получении данных о заказе мне нужна цена продукта на момент продажи, а не новая цена. Есть ли способ сделать это в Prisma, не узнав предварительно цены на продукты?

Вот схема:

      model Product {
  id          String            @id @default(cuid())
  name        String
  // todo add check stock can't be less than zero
  stock       Int
  // todo add check price can't be less than zero
  buyPrice    Float
  sellPrice   Float
  image       String
  createdAt   DateTime          @default(now())
  createdBy   User              @relation(fields: [createdById], references: [id])
  createdById String
  category    Category          @relation(fields: [categoryId], references: [id])
  categoryId  String
  orders      ProductsOnOrder[]
}

model Order {
  id          String            @id @default(cuid())
  // guess it's suppose to be computed value
  total       Float
  paymentType PaymentType       @default(CASH)
  createdAt   DateTime          @default(now())
  createdById String
  createdBy   User              @relation(fields: [createdById], references: [id])
  products    ProductsOnOrder[]
}

model ProductsOnOrder {
  productId String
  Product   Product @relation(fields: [productId], references: [id])
  orderId   String
  order     Order   @relation(fields: [orderId], references: [id])
  quantity  Int     @default(1)
  price     Float // Price of the product at the time of the order

  @@id([productId, orderId])
}

1 ответ

Когда вы создаете заказ в коде приложения, вам нужно будет вручную получить текущую цену продукта и включить ее в создание записи ProductsOnOrder.

Другие вопросы по тегам