Given these schemas:
model awayinfo {
PlayerID Int @id
IsAway Boolean
playerinfo playerinfo @relation(fields: [PlayerID], references: [ID])
}
model playerinfo {
name String @db.VarChar(15)
ID Int @id @unique @default(autoincrement())
awayinfo awayinfo?
}
How would I create a prisma SQL update for the awayinfo table if the only identifier I have would be the Name of a player and not the ID?
what I tried:
I try to pass something into the WHERE part as seen below:
const result = await prisma.awayinfo.update({
where: {
PlayerID: {
name: name
}
},
data: {
IsAway: true,
}
});
but it always gives me the Error:
Invalid `prisma.awayinfo.update()` invocation:
Argument PlayerID: Got invalid value
{
name: 'Dummy'
}
on prisma.updateOneawayinfo. Provided Json, expected Int.
I got pretty desperate and even tried wonky selects like this one
const result = await prisma.awayinfo.update({
where: {
PlayerID: {
playerinfo: {
Where: {
name: name
},
select: {ID: true},
}}
}, ..
but obviously this would not work aswell. I wonder what I am missing here and I cannot find any example of a condition within the WHERE clause in the prisma documentation
Advertisement
Answer
There are two issues here, the first is in your Prisma schema/data model and the second is in your query.
Making name
unique
Firstly, if you want to uniquely identify a record in the playerinfo
table with just the name
property, this property must be unique
. Otherwise, it’s not possible for your database (and Prisma) to know which player info record to update in case there are multiple records with the same name
property.
Update your schema accordingly:
model playerinfo {
name String @unique @db.VarChar(15)
ID Int @id @unique @default(autoincrement())
awayinfo awayinfo?
}
Rewriting the update query
Since the where
condition in your update references a property playerinfo
model, that is where you should begin your query. Here’s what it looks like:
const data = await prisma.playerinfo.update({
where: {
name: name
},
data: {
awayinfo: {
update: {
IsAway: true
}
}
}
})