#sql #prisma
#sql #призма
Вопрос:
Учитывая эти схемы:
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? }
Как бы я создал обновление prisma SQL для таблицы awayinfo, если бы единственным идентификатором, который у меня есть, было имя игрока, а не идентификатор?
что я пытался:
Я пытаюсь передать что-то в часть «ГДЕ», как показано ниже:
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}, }} }, .....
но очевидно, что это не сработало бы так же хорошо. Интересно, чего мне здесь не хватает, и я не могу найти ни одного примера условия в предложении WHERE в документации prisma
Ответ №1:
Здесь есть две проблемы: первая-в вашей схеме Prisma/модели данных, а вторая-в вашем запросе.
Создание name
уникальных
Во-первых, если вы хотите однозначно идентифицировать запись в playerinfo
таблице только с 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 } } } })
Комментарии:
1. Этот ответ очень подробный и полностью решает проблему. Я сам разобрался в этой уникальной части, но еще раз спасибо, что указали на это!
2. Добро пожаловать! Рад помочь 😀