Prisma 更新与 WHERE 属性 中的关系
Prisma update with relation in WHERE property
鉴于这些模式:
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?
}
如果我拥有的唯一标识符是玩家的姓名而不是玩家 ID,我将如何为 awayinfo table 创建 prisma SQL 更新?
我尝试了什么:
我尝试将某些内容传递到 WHERE 部分,如下所示:
const result = await prisma.awayinfo.update({
where: {
PlayerID: {
name: name
}
},
data: {
IsAway: true,
}
});
但它总是给我错误:
Invalid `prisma.awayinfo.update()` invocation:
Argument PlayerID: Got invalid value
{
name: 'Dummy'
}
on prisma.updateOneawayinfo. Provided Json, expected Int.
我非常绝望,甚至尝试过像这样的不稳定选择
const result = await prisma.awayinfo.update({
where: {
PlayerID: {
playerinfo: {
Where: {
name: name
},
select: {ID: true},
}}
}, .....
但显然这也行不通。
我想知道我在这里遗漏了什么,我在 prisma 文档
的 WHERE 子句中找不到任何条件示例
这里有两个问题,第一个是你的 Prisma schema/data 模型,第二个是你的查询。
使name
独一无二
首先,如果你想在 playerinfo
table 中唯一标识一条记录 只需 name
属性 ,这个属性必须是unique
。否则,您的数据库(和 Prisma)不可能知道 哪个 玩家信息记录要更新,以防有多个记录具有相同的 name
属性。
相应地更新您的架构:
model playerinfo {
name String @unique @db.VarChar(15)
ID Int @id @unique @default(autoincrement())
awayinfo awayinfo?
}
重写更新查询
由于更新中的 where
条件引用了 属性 playerinfo
模型,因此您应该从那里开始查询。这是它的样子:
const data = await prisma.playerinfo.update({
where: {
name: name
},
data: {
awayinfo: {
update: {
IsAway: true
}
}
}
})
鉴于这些模式:
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?
}
如果我拥有的唯一标识符是玩家的姓名而不是玩家 ID,我将如何为 awayinfo table 创建 prisma SQL 更新?
我尝试了什么:
我尝试将某些内容传递到 WHERE 部分,如下所示:
const result = await prisma.awayinfo.update({
where: {
PlayerID: {
name: name
}
},
data: {
IsAway: true,
}
});
但它总是给我错误:
Invalid `prisma.awayinfo.update()` invocation:
Argument PlayerID: Got invalid value
{
name: 'Dummy'
}
on prisma.updateOneawayinfo. Provided Json, expected Int.
我非常绝望,甚至尝试过像这样的不稳定选择
const result = await prisma.awayinfo.update({
where: {
PlayerID: {
playerinfo: {
Where: {
name: name
},
select: {ID: true},
}}
}, .....
但显然这也行不通。 我想知道我在这里遗漏了什么,我在 prisma 文档
的 WHERE 子句中找不到任何条件示例这里有两个问题,第一个是你的 Prisma schema/data 模型,第二个是你的查询。
使name
独一无二
首先,如果你想在 playerinfo
table 中唯一标识一条记录 只需 name
属性 ,这个属性必须是unique
。否则,您的数据库(和 Prisma)不可能知道 哪个 玩家信息记录要更新,以防有多个记录具有相同的 name
属性。
相应地更新您的架构:
model playerinfo {
name String @unique @db.VarChar(15)
ID Int @id @unique @default(autoincrement())
awayinfo awayinfo?
}
重写更新查询
由于更新中的 where
条件引用了 属性 playerinfo
模型,因此您应该从那里开始查询。这是它的样子:
const data = await prisma.playerinfo.update({
where: {
name: name
},
data: {
awayinfo: {
update: {
IsAway: true
}
}
}
})