繁体   English   中英

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 表创建 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 模式/数据 model 中,第二个在您的查询中。

name独一无二

首先,如果你想name属性唯一标识playerinfo表中的一条记录,这个属性必须unique 否则,如果有多个具有相同name属性的记录,您的数据库(和 Prisma)不可能知道要更新哪个玩家信息记录。

相应地更新您的架构:

model playerinfo {
  name     String    @unique @db.VarChar(15)
  ID       Int       @id @unique @default(autoincrement())
  awayinfo awayinfo?
}

重写更新查询

由于更新中的where条件引用了属性playerinfo model,因此您应该从那里开始查询。 这是它的样子:

const data = await prisma.playerinfo.update({
    where: {
        name: name
    }, 
    data: {
        awayinfo: {
            update: {
                IsAway: true
            }
        }
    }
})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM