postgresql 创建方法时出现Prisma错误-缺少参数名称和参数位置

ctrmrzij  于 12个月前  发布在  PostgreSQL
关注(0)|答案(1)|浏览(174)

我创建的地方,然后我不断得到棱镜错误,但我提供了所有需要的数据。每次我创建的地方,我得到这个错误,但我提供了所有必需的数据。我没有得到我可能犯的错误,我检查了一遍又一遍我的代码。

Invalid `this.prisma.place.create()` invocation in
C:\Users\charm\tourism-portal\src\place\place.service.ts:12:52

   9 constructor(private prisma: PrismaService) {}
  10
  11 async createTouristicPlace(adminId: number, dto: CreatePlaceDto) {
→ 12   const touristicPlace = await this.prisma.place.create({
         data: {
           admin: {
             connect: {
               id: 35
             }
           },
       +   name: String,
       +   location: String,
       ?   createdAt?: DateTime,
       ?   updatedAt?: DateTime
         }
       })

Argument name for data.name is missing.
Argument location for data.location is missing.

下面是我代码:

import { Injectable } from '@nestjs/common';
import { CreatePlaceDto, EditPlaceDto } from './dto';
import { PrismaService } from '../prisma/prisma.service';

@Injectable()
export class TouristicPlaceService {
  constructor(private prisma: PrismaService) {}

  async createTouristicPlace(adminId: number, dto: CreatePlaceDto) {
    const touristicPlace = await this.prisma.place.create({
      data: {
        admin: {
          connect: { id: adminId },
        },
        ...dto,
      },
    });
    console.log(dto);
    return console.log(touristicPlace);
  }

这是我的dto

import { IsNotEmpty, IsString } from 'class-validator';

export class CreatePlaceDto {
  @IsString()
  @IsNotEmpty()
  name: string;

  @IsString()
  @IsNotEmpty()
  location: string;
}

我的DB模型

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

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

model Admin {
  id        Int      @id @default(autoincrement())
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt

  adminID   String  @unique
  email     String  @unique
  firstName String
  lastName  String
  hash      String
  Places    Place[]

  @@map("admins")
}

model Place {
  id        Int      @id @default(autoincrement())
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt

  name     String
  location String

  adminId Int
  admin   Admin @relation(fields: [adminId], references: [id])

  @@map("places")
}

我试图创建一个地方端点,但我一直得到一个Prisma错误,我不是真的得到我是新的Prisma和NestJ。

nzk0hqpo

nzk0hqpo1#

当使用Prisma创建或更新具有关系的记录时,必须确保数据结构与Prisma所期望的相匹配。未对齐可能导致意外行为或错误。
在您的情况下,检查dto(数据传输对象)结构至关重要。如果使用异步操作来生成或修改dto,则在Prismacreate方法中使用它时,它可能尚未就绪或结构不正确。
对于故障排除,我建议逐步构建您的数据对象,而不是仅仅依靠dto的spread运算符(请先检查此create函数,而不要使用dto中的值来检查它是否正确):

const touristicPlace = await this.prisma.place.create({
  data: {
    admin: {
      connect: { id: adminId },
    },
    name: "value",
    location: "value",
    // ... add other fields manually here
  },
});

而不是:

const touristicPlace = await this.prisma.place.create({
  data: {
    admin: {
      connect: { id: adminId },
    },
    ...dto,
  },
});

这种方法使您可以清楚地看到每个字段,并有助于识别dto中的任何异常或缺失值。一旦你对dto的结构和内容有了信心,你就可以用spread操作符重新集成它。

相关问题