【问题标题】:Prisma one to many relationship: insert and updatePrisma 一对多关系:插入和更新
【发布时间】:2021-08-24 17:20:07
【问题描述】:

型号

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

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

generator dbml {
  provider = "prisma-dbml-generator"
}

model Inventory {
  id        Int       @id @default(autoincrement())
  userId    String    @map("user_id")
  type      String    @unique
  currency  String
  active    String    @default("Y")
  createdAt DateTime  @default(now()) @map("created_at")
  updatedAt DateTime? @default(now()) @map("updated_at")
  createdBy String?   @map("created_by")
  updatedBy String?   @map("updated_by")
  products  Product[]

  @@map("inventory")
}

model Category {
  id             Int       @id @default(autoincrement())
  categoryName   String    @unique@map("category_name")
  categoryConfig String    @map("category_config")
  categoryType   String    @default("SERVICE") @map("category_type")
  createdAt      DateTime  @default(now()) @map("created_at")
  updatedAt      DateTime  @default(now()) @map("updated_at")
  createdBy      String?   @map("created_by")
  updatedBy      String?   @map("updated_by")
  products       Product[]
}

model Product {
  id                           Int        @id @default(autoincrement())
  categories                   Category?  @relation(fields: [categoryId], references: [id])
  inventories                  Inventory? @relation(fields: [inventoryId], references: [id])
  categoryId                   Int?       @map("category_id")
  inventoryId                  Int?       @map("inventoryId")
  productName                  String     @unique @map("product_name")
  productDescription           String     @map("product_description")
  productUnitPrice             Float      @map("product_unit_price")
  productUnitOfMeasure         Int?       @map("product_unit_of_measure")
  productInStock               Int?       @map("product_in_stock")
  productStatus                Boolean    @default(true) @map("product_status")
  productSize                  Float?     @map("product_size")
  productColour                String?    @map("product_colour")
  productModel                 String?    @map("product_model")
  productSlug                  String?    @map("product_slug")
  productAvatar                String?    @map("product_avatar")
  productDeliveryCharges       Int?       @map("product_delivery_charges")
  productDeliveryFrequencyRate Int        @map("product_delivery_frequency_rate")
  productAverageRating         Int?       @map("product_average_rating")
  createdAt                    DateTime?  @default(now()) @map("created_at")
  updatedAt                    DateTime?  @map("updated_at")
  createdBy                    String?    @map("created_by")
  updatedBy                    String?    @map("updated_by")

  @@map("products")
}

库存DTO

 export class InventoryDTO {
      @ApiProperty() @IsNotEmpty() readonly userId: string;
      @ApiProperty() @IsNotEmpty() readonly type: string;
      @ApiProperty() @IsNotEmpty() readonly currency: string;
      @ApiProperty() readonly products: prisma.ProductCreateNestedManyWithoutInventoriesInput;
    }

控制器:

@Post('add')
  async addInventory(
    @Body() inventoryDTO: InventoryDTO,
  ): Promise<InventoryEntity> {
    let data = this.inventoryService.addInventory(inventoryDTO);
    let result = await data.then((result) => {
      return classToClass(new InventoryEntity(result));
    });
    return result;
  }

服务

async addInventory(data: Prisma.InventoryCreateInput): Promise<Inventory> {
    let recordExists = this.getInventory({ type: data.type });
    let result = await recordExists.then((result) => {
      return result;
    });

    if (result == null) {
      return this.prismaService.inventory.create({
        data,
        include: {
          products: true,
        },
      });
    } else {
      this.logger.error(ERROR_INVENTORYTYPE_MUST_BE_UNIQUE);
      throw new HttpException(
        ERROR_INVENTORYTYPE_MUST_BE_UNIQUE,
        HttpStatus.BAD_REQUEST,
      );
    }
  }

我已经附加了我的所有代码,当我尝试从具有多个产品的 UI 中发送 inventyDTO 中的数据时。如下所示

{
...InventoryData,
...products : [{
         }]
}

我想通过 addInventory 方法在库存和产品表中插入记录。请有人帮忙处理这个请求。??

仅供参考,Prisma 生成以下模型,

Prisma.InventoryCreateInput

  export type InventoryCreateInput = {
    type: string
    currency: string
    active?: string
    userId: string
    createdAt?: Date | string
    updatedAt?: Date | string | null
    createdBy?: string | null
    updatedBy?: string | null
    products?: ProductCreateNestedManyWithoutInventoriesInput
  }


export type ProductCreateNestedManyWithoutInventoriesInput = {
create?: XOR<Enumerable<ProductCreateWithoutInventoriesInput>, Enumerable<ProductUncheckedCreateWithoutInventoriesInput>>
connectOrCreate?: Enumerable<ProductCreateOrConnectWithoutInventoriesInput>
createMany?: ProductCreateManyInventoriesInputEnvelope
connect?: Enumerable<ProductWhereUniqueInput>

}

【问题讨论】:

    标签: relationship prisma


    【解决方案1】:

    您的数据应如下所示:

    const data: Prisma.InventoryCreateInput = {
        currency: 'c',
        type: 't',
        userId: 'u',
        products: {
          create: [
            {
              productDeliveryFrequencyRate: 1,
              productName: 'p',
              productDescription: 'd',
              productUnitPrice: 1,
            },
          ],
        },
    }
    

    您可以通过转到ProductCreateNestedManyWithoutInventoriesInput 的定义来查看输入,并查看它接受的内容。

    【讨论】:

    • 我添加了 ProductCreateNestedManyWithoutInventoriesInput 的格式
    • 是的,所以我上面的答案会起作用。该类型通过create 接受产品,您可以在那里传递值。
    猜你喜欢
    • 2021-06-30
    • 2021-07-23
    • 1970-01-01
    • 2021-12-04
    • 2021-04-11
    • 2020-11-11
    • 2021-09-17
    • 2022-01-27
    • 2012-03-23
    相关资源
    最近更新 更多