Prisma 的房間管理系統
P粉819937486
P粉819937486 2024-03-30 18:46:05
0
1
503

我試圖為房間管理系統建立一個資料庫,但我對這些關係感到困惑,並且在網路上找不到有用的資源,你能告訴我這個 prisma 腳本是否有問題嗎?因為我想在expressJs中控制它並基於它製作一個應用程式

generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "mysql"
  url      = env("DATABASE_URL")
}

model Guest {
  guestId     String        @id @default(uuid())
  name        String
  phone       String        @unique()
  address     String?
  nationality String
  Reservation Reservation[] @relation("GuestReservation")
}

model Reservation {
  reservationId Int             @id @default(autoincrement())
  checkIn       DateTime
  checkOut      DateTime
  Guest         Guest           @relation("GuestReservation", fields: [guestId], references: [guestId], onDelete: Cascade)
  guestId       String
  visitors      Int
  Room          Room            @relation("RoomReservation", fields: [roomId], references: [roomId], onDelete: Cascade)
  type          ReservationType
  roomId        Int
  Bill          Bill?           @relation("BillReservation")
}

enum ReservationType {
  Booking
  Contract
  Booked
  Canceled
}

model Room {
  roomId      Int           @id @default(autoincrement())
  price       Float
  type        Type
  Reservation Reservation[] @relation("RoomReservation")
}

enum Type {
  Single
  Double
  Triple
}

model Bill {
  invoiceNo     String      @id @default(uuid())
  Reservation   Reservation @relation("BillReservation", fields: [reservationId], references: [reservationId], onDelete: Cascade)
  reservationId Int         @unique()
  roomService   Float       @default(0)
  paymentMode   Payment
  Service       Service[]
}

enum Payment {
  Cash
  Visa
}

model Service {
  serviceId     String      @id @default(uuid())
  type          ServiceType
  name          String
  price         Float
  Bill          Bill        @relation(fields: [billInvoiceNo], references: [invoiceNo], onDelete: Cascade)
  billInvoiceNo String
}

enum ServiceType {
  Bar
  Laundry
}

我嘗試為每個實體創建一個粗略的內容,但最終出現了關係錯誤,例如外來密鑰之類的東西,這意味著我的關係有問題。

P粉819937486
P粉819937486

全部回覆(1)
P粉037450467

您的架構是有效的,但我建議在為表定義 id 時保持一致性。有些表的id是字串類型,有些表的id是數字類型。

以下是為模型建立實體的查詢範例。

import {
  PrismaClient,
  Type,
  ServiceType,
  Payment,
  ReservationType,
} from '@prisma/client';

const prisma = new PrismaClient({
  log: ['query'],
});

async function main() {
  // Creating a room
  await prisma.room.create({
    data: {
      price: 100,
      type: Type.Single,
      roomId: 1,
    },
  });

  // Creating a guest
  await prisma.guest.create({
    data: {
      name: 'Test',
      nationality: 'Indian',
      phone: '1234567890',
      address: 'Test Address',
      guestId: '1',
    },
  });

  // Creating a service with a bill and a reservation
  await prisma.service.create({
    data: {
      name: 'test',
      price: 100,
      type: ServiceType.Bar,
      serviceId: '1',
      Bill: {
        create: {
          paymentMode: Payment.Cash,
          invoiceNo: '1',
          Reservation: {
            create: {
              checkIn: new Date(),
              checkOut: new Date(),
              type: ReservationType.Booked,
              visitors: 1,
              roomId: 1,
              guestId: '1',
            },
          },
        },
      },
    },
  });
}

main()
  .catch((e) => {
    throw e;
  })
  .finally(async () => {
    await prisma.$disconnect();
  });

這是查詢回應:

> ts-node index.ts
prisma:query BEGIN
prisma:query INSERT INTO `white_egret`.`Room` (`roomId`,`price`,`type`) VALUES (?,?,?)
prisma:query SELECT `white_egret`.`Room`.`roomId`, `white_egret`.`Room`.`price`, `white_egret`.`Room`.`type` FROM `white_egret`.`Room` WHERE `white_egret`.`Room`.`roomId` = ? LIMIT ? OFFSET ?
prisma:query COMMIT
prisma:query BEGIN
prisma:query INSERT INTO `white_egret`.`Guest` (`guestId`,`name`,`phone`,`address`,`nationality`) VALUES (?,?,?,?,?)
prisma:query SELECT `white_egret`.`Guest`.`guestId`, `white_egret`.`Guest`.`name`, `white_egret`.`Guest`.`phone`, `white_egret`.`Guest`.`address`, `white_egret`.`Guest`.`nationality` FROM `white_egret`.`Guest` WHERE `white_egret`.`Guest`.`guestId` = ? LIMIT ? OFFSET ?
prisma:query COMMIT
prisma:query BEGIN
prisma:query INSERT INTO `white_egret`.`Reservation` (`reservationId`,`checkIn`,`checkOut`,`guestId`,`visitors`,`type`,`roomId`) VALUES (?,?,?,?,?,?,?)
prisma:query INSERT INTO `white_egret`.`Bill` (`invoiceNo`,`reservationId`,`roomService`,`paymentMode`) VALUES (?,?,?,?)
prisma:query INSERT INTO `white_egret`.`Service` (`serviceId`,`type`,`name`,`price`,`billInvoiceNo`) VALUES (?,?,?,?,?)
prisma:query SELECT `white_egret`.`Service`.`serviceId`, `white_egret`.`Service`.`type`, `white_egret`.`Service`.`name`, `white_egret`.`Service`.`price`, `white_egret`.`Service`.`billInvoiceNo` FROM `white_egret`.`Service` WHERE `white_egret`.`Service`.`serviceId` = ? LIMIT ? OFFSET ?
prisma:query COMMIT
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板