关于混音独立堆栈的更新说明



Remix有一个名为独立堆栈的示例repohttps://github.com/remix-run/indie-stack.我对前端开发很陌生,以前从未真正使用过TS、react或prisma。

我正在查看https://github.com/remix-run/indie-stack/blob/main/app/models/note.server.ts文件,并试图通过尝试使用getNote函数作为示例,以及prisma的文档,找出如何编写一个函数,在给定新标题和正文的情况下更新注释:https://www.prisma.io/docs/concepts/components/prisma-client/crud#update

export function updateNote({
id,
body,
title,
userId,
}: Pick<Note, "body" | "title" | "id"> & { userId: User["id"] }) {
return prisma.note.update({
where: { id, userId },
data: {
title,
body,
},
});
}

typescript不喜欢where: { id, userId},这让我很困惑,因为它被用于get和delete函数。

Type '{ id: string; userId: string; }' is not assignable to type 'NoteWhereUniqueInput'.
Object literal may only specify known properties, and 'userId' does not exist in type 'NoteWhereUniqueInput'.ts(2322)
index.d.ts(3448, 5): The expected type comes from property 'where' which is declared here on type '{ select?: NoteSelect | null | undefined; include?: NoteInclude | null | undefined; data: (Without<NoteUpdateInput, NoteUncheckedUpdateInput> & NoteUncheckedUpdateInput) | (Without<...> & NoteUpdateInput); where: NoteWhereUniqueInput; }'

如果能解释一下为什么我的函数是错误的,以及我应该如何写它,我将不胜感激。

-谢谢。

更新:由于4.5,似乎可以使用非唯一字段,请参阅发行说明中的详细信息。

您正在调用PrismaupdateAPI(链接可能无法指向update部分,请单击右侧导航中的"更新"(。

API希望*WhereUniqueInput类型作为输入,这里是文档的相关部分:

包装模型的所有唯一字段,以便可以选择单个记录。

Note模型具有以下定义(删除了非重要部分(:

model Note {
id    String @id @default(cuid())
userId String
}

因此,id是主键,因此它是唯一的,但userId只是一个没有@unique装饰器的字段,而不是主键,因此,它不能是updateAPI调用中where的一部分。

但你真的需要它吗?你的应用程序似乎是为了更新属于当前用户的笔记,所以不需要更新userId,而id已经明确标识了特定的笔记。我认为你的功能应该是这样的:

export function updateNote({
id,
body,
title,
}: Pick<Note, "body" | "title" | "id">) {
return prisma.note.update({
where: { id },
data: { 
title,
body,
},
});
}

相关内容

  • 没有找到相关文章

最新更新