client.user.upsert({
where: {
...payload,
},
create: {
//code
},
updata: {
//code
}
});
where field에 제공하는 payload가 데이터를 가져오지 못해 Error가 발생했다.
upsert에 제공하는 where 프로퍼티의 payload는 반드시 prisma.schema에서 unique한 field여야 한다.
// unique가 달려있지 않으면 myFiled를 where에게 payload로 넘겨줄 때 error가 발생한다. upsert에는 default로 findUnique가 설정되어있기 때문이다.
myField String?
간단하다. @unique 옵션을 추가해준다.
myField String? @unique
분명 prisma schema를 수정했음에도 불구하고 동일한 Error가 발생하고 있었다. 구글링과 프로그램 특성상 Error의 원인은 git과 비슷한 이유일 것이라 추론했다.
local의 prisma.schema는 변했지만, Pscale의 Schema는 변하지 않았다는 것.
쉽게 말해 새로운 Schema를 commit, push를 해주어야 한다는 것이다.
pscale DB connection은 끊어둔 뒤, 아래의 과정을 진행한다.
npx prisma db push
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
relationMode = "prisma"
}
model User {
id Int @id @default(autoincrement())
nonUniqueField Int?
uniqueField String? @unique
}
nonUniqueField를 upsert의 where payload로 넘겨주면 에러난다. unique한 field가 아니어서 하나의 값만 가져올 수 없
기 때문이다.