Search code examples
postgresqlexpresstransactionscrudprisma

prisma nested writes throw unknown args


I have the shorten schema like that:

model PATIENT {
  patient_id                 Int                  @id @default(autoincrement())
  patient_name               String
  patient_identity_card      BigInt               @unique
  password                   String
  wallet_id                  Int?
  birthday                   DateTime
  address                    String
  status_id                  Int
  gender                     String               @default("Nam")
  phone                      String               @default("0935438280")
  current_treatment_place_id Int
  avatar_url                 String?
  treatment_place            TREATMENT_PLACE      @relation(fields: [current_treatment_place_id], references: [place_id])
  status                     PATIENT_STATUS       @relation(fields: [status_id], references: [status_id])
  card                       CART?
  patient_passive_contact    PATIENT_CONTACT[]    @relation("ActiveContact_referredToPatient")
  patient_active_contact     PATIENT_CONTACT[]    @relation("PassiveContact_referredToPatient")
  BE_MANAGED_HISTORY         BE_MANAGED_HISTORY[]
}
model BE_MANAGED_HISTORY {
  place_id       Int
  patient_id     Int
  time           DateTime
  status_id      Int
  status         PATIENT_STATUS              @relation(fields: [status_id], references: [status_id])
  patient        PATIENT                     @relation(fields: [patient_id], references: [patient_id])
  place          TREATMENT_PLACE             @relation(fields: [place_id], references: [place_id])
  change_type_id Int
  change_type    CHANGE_MANAGED_HISTORY_TYPE @relation(fields: [change_type_id], references: [type_id])

  @@id([place_id, patient_id, time])
}

I want to create a BE_MANAGED_HISTORY record and through it create a PATIENT record with needed information. The nested writes below:

const res = await prisma.BE_MANAGED_HISTORY.create({
                data: {
                    place_id: treatmentPlaceId,
                    time: new Date(startDate),
                    status_id: patientStatus,
                    change_type_id: 1,
                    patient: {
                        create: {
                            patient_name: patientName,
                            gender,
                            birthday: new Date(birthday),
                            patient_identity_card: identity,
                            password: hashedPassword,
                            phone,
                            address,
                            status_id: patientStatus,
                            current_treatment_place_id: treatmentPlaceId,
                            avatar_url: avatarUrl,
                        }
                    }
                },
            })
But prisma throws an error:

Unknown arg patient in data.patient for type BE_MANAGED_HISTORYUncheckedCreateInput. Did you mean patient_id? Argument patient_id for data.patient_id is missing.

So can I create an beManagedHistory and create an patient inside nested writes?


Solution

  • We have to create a PATIENT record first, and nested in it creating a BE_MANAGED_HISTORY record.