最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

prisma - Can't insert Id to field with a FK relation - Stack Overflow

programmeradmin11浏览0评论

I am getting this error in my POST route (full error below):

Unknown argument `countryId`. Did you mean `country`? Available options are marked with ?.

This POST route fails on create:

router.post('/', (req, res) => {
    const {
        modelNominalValue: nominalValue, modelFaceValue: faceValue, modelCommonName: commonName,
        modelObverse: obverse, modelReverse: reverse, modelComposition: composition,
        modelYearStart: yearStart, modelYearEnd: yearEnd, modelDimensionsMilimeters: dimensionsMilimeters,
        modelComments: comments, selectedCountryId: countryId, selectedCurrencyId: currencyId,
        rulerId, periodId, shapeId,
    } = req.body;

    prisma.banknote.create({
        data: {
            nominalValue, faceValue, commonName, obverse, reverse, composition, yearStart, yearEnd,
            dimensionsMilimeters, comments, countryId, currencyId, rulerId, periodId, shapeId,
            createdAt: new Date(), updatedAt: new Date(),
        },
    })
        .then((banknote) => {
            res.status(201).json(banknote);
        })
        .catch((err) => {
            res.status(500).send(err.message);
        });
});

The prisma model is:

model Banknote {
  id                   Int            @id(map: "PK__Banknote__3214EC07EA22598A") @default(autoincrement()) @map("Id")
  nominalValue         Decimal        @map("FaceValue") @db.Decimal(8, 3)
  faceValue            String         @map("PrettyFaceValue") @db.NVarChar(30)
  commonName           String?        @map("CommonName") @db.NVarChar(60)
  obverse              String         @map("Obverse") @db.NVarChar(2000)
  reverse              String         @map("Reverse") @db.NVarChar(2000)
  yearStart            String?        @map("YearStart") @db.NVarChar(255)
  yearEnd              String?        @map("YearEnd") @db.NVarChar(255)
  composition          String?        @map("Composition") @db.NVarChar(255)
  dimensionsMilimeters String?        @map("DimensionsMilimeters") @db.NVarChar(40)
  comments             String?        @map("Comments") @db.NVarChar(2000)
  periodId             Int?           @map("PeriodId")
  countryId            Int?           @map("CountryId")
  currencyId           Int?           @map("CurrencyId")
  createdAt            DateTime       @map("CreatedAt")
  updatedAt            DateTime       @map("UpdatedAt")
  country              Country?       @relation(fields: [countryId], references: [id], onDelete: NoAction, onUpdate: NoAction, map: "FK_Banknote_Country")
  currency             Currency?      @relation(fields: [currencyId], references: [id], onDelete: NoAction, onUpdate: NoAction, map: "FK_Banknote_Currency")
  period               Period?        @relation(fields: [periodId], references: [id], onDelete: NoAction, onUpdate: NoAction, map: "FK_Banknote_Period")
  banknoteMints        BanknoteMint[]
  collections          Collection[]
  images               Image[]
}

Full error:

Invalid `prisma.banknote.create()` invocation:

{
data: {
nominalValue: ".125",
faceValue: "O.125",
commonName: "cool coin",
obverse: "Obverse txt",
reverse: "Reverse txt",
composition: "Good stuff",
yearStart: "2000",
yearEnd: "2002",
dimensionsMilimeters: "12x12",
comments: "Comments",
countryId: 1,
~~~~~~~~~
currencyId: 1,
rulerId: 1,
periodId: 1,
shapeId: 1,
createdAt: new Date("2025-02-05T00:09:16.850Z"),
updatedAt: new Date("2025-02-05T00:09:16.850Z"),
? country?: CountryCreateNestedOneWithoutBanknotesInput,
? currency?: CurrencyCreateNestedOneWithoutBanknotesInput,
? period?: PeriodCreateNestedOneWithoutBanknotesInput,
? banknoteMints?: BanknoteMintCreateNestedManyWithoutBanknoteInput,
? collections?: CollectionCreateNestedManyWithoutBanknoteInput,
? images?: ImageCreateNestedManyWithoutBanknoteInput
}
}

Unknown argument `countryId`. Did you mean `country`? Available options are marked with ?.

How can I make reference to the country by id be accomplished?

I am getting this error in my POST route (full error below):

Unknown argument `countryId`. Did you mean `country`? Available options are marked with ?.

This POST route fails on create:

router.post('/', (req, res) => {
    const {
        modelNominalValue: nominalValue, modelFaceValue: faceValue, modelCommonName: commonName,
        modelObverse: obverse, modelReverse: reverse, modelComposition: composition,
        modelYearStart: yearStart, modelYearEnd: yearEnd, modelDimensionsMilimeters: dimensionsMilimeters,
        modelComments: comments, selectedCountryId: countryId, selectedCurrencyId: currencyId,
        rulerId, periodId, shapeId,
    } = req.body;

    prisma.banknote.create({
        data: {
            nominalValue, faceValue, commonName, obverse, reverse, composition, yearStart, yearEnd,
            dimensionsMilimeters, comments, countryId, currencyId, rulerId, periodId, shapeId,
            createdAt: new Date(), updatedAt: new Date(),
        },
    })
        .then((banknote) => {
            res.status(201).json(banknote);
        })
        .catch((err) => {
            res.status(500).send(err.message);
        });
});

The prisma model is:

model Banknote {
  id                   Int            @id(map: "PK__Banknote__3214EC07EA22598A") @default(autoincrement()) @map("Id")
  nominalValue         Decimal        @map("FaceValue") @db.Decimal(8, 3)
  faceValue            String         @map("PrettyFaceValue") @db.NVarChar(30)
  commonName           String?        @map("CommonName") @db.NVarChar(60)
  obverse              String         @map("Obverse") @db.NVarChar(2000)
  reverse              String         @map("Reverse") @db.NVarChar(2000)
  yearStart            String?        @map("YearStart") @db.NVarChar(255)
  yearEnd              String?        @map("YearEnd") @db.NVarChar(255)
  composition          String?        @map("Composition") @db.NVarChar(255)
  dimensionsMilimeters String?        @map("DimensionsMilimeters") @db.NVarChar(40)
  comments             String?        @map("Comments") @db.NVarChar(2000)
  periodId             Int?           @map("PeriodId")
  countryId            Int?           @map("CountryId")
  currencyId           Int?           @map("CurrencyId")
  createdAt            DateTime       @map("CreatedAt")
  updatedAt            DateTime       @map("UpdatedAt")
  country              Country?       @relation(fields: [countryId], references: [id], onDelete: NoAction, onUpdate: NoAction, map: "FK_Banknote_Country")
  currency             Currency?      @relation(fields: [currencyId], references: [id], onDelete: NoAction, onUpdate: NoAction, map: "FK_Banknote_Currency")
  period               Period?        @relation(fields: [periodId], references: [id], onDelete: NoAction, onUpdate: NoAction, map: "FK_Banknote_Period")
  banknoteMints        BanknoteMint[]
  collections          Collection[]
  images               Image[]
}

Full error:

Invalid `prisma.banknote.create()` invocation:

{
data: {
nominalValue: ".125",
faceValue: "O.125",
commonName: "cool coin",
obverse: "Obverse txt",
reverse: "Reverse txt",
composition: "Good stuff",
yearStart: "2000",
yearEnd: "2002",
dimensionsMilimeters: "12x12",
comments: "Comments",
countryId: 1,
~~~~~~~~~
currencyId: 1,
rulerId: 1,
periodId: 1,
shapeId: 1,
createdAt: new Date("2025-02-05T00:09:16.850Z"),
updatedAt: new Date("2025-02-05T00:09:16.850Z"),
? country?: CountryCreateNestedOneWithoutBanknotesInput,
? currency?: CurrencyCreateNestedOneWithoutBanknotesInput,
? period?: PeriodCreateNestedOneWithoutBanknotesInput,
? banknoteMints?: BanknoteMintCreateNestedManyWithoutBanknoteInput,
? collections?: CollectionCreateNestedManyWithoutBanknoteInput,
? images?: ImageCreateNestedManyWithoutBanknoteInput
}
}

Unknown argument `countryId`. Did you mean `country`? Available options are marked with ?.

How can I make reference to the country by id be accomplished?

Share Improve this question asked Feb 5 at 0:41 EricEric 1,2222 gold badges16 silver badges30 bronze badges
Add a comment  | 

1 Answer 1

Reset to default 1

Your code looks correct, at least from a quick glance. What is happening here is that Prisma is interpreting this as a normal CreateInput instead of a UncheckedCreateInput.

Make sure that the Prisma generated types are up-to-date with your Prisma schema (i.e. prisma generate).

To be sure you could, instead of using an implicit one, explictly define the object containing the data to be inserted in the database as an UncheckedCreateInput (in this case BanknoteUncheckedCreateInput); if there were any errors in your object TypeScript would let you know.

If this (somehow) still doesn't work, you could always use the "old" way of connecting relations like so

country: {
  connect: {
    id,
  },
}
发布评论

评论列表(0)

  1. 暂无评论