Prisma显式多对多关联:VS Code智能提示与文档语法不符?
自定义多对多连接表属性的正确实现方式
针对你用Prisma定义的自定义连接表多对多关系,要设置isAdmin这类连接表属性,不能直接通过关联的主模型(比如User或Conversation)的嵌套关联字段直接传入,得直接操作连接表模型ConversationRelation,或者在创建主模型时嵌套创建连接表记录,具体实现如下:
方式1:直接创建连接表记录
如果用户和会话已经存在,直接通过create方法创建ConversationRelation来关联两者并设置isAdmin:
const result = await prisma.conversationRelation.create({ data: { userId: "已存在的用户ID", conversationId: "已存在的会话ID", isAdmin: true // 这里可以直接设置连接表属性 } });
方式2:创建会话时嵌套创建关联及连接表属性
如果要在创建新会话的同时添加参与者并设置isAdmin,可以通过participants.create嵌套到连接表层级:
const newConversation = await prisma.conversation.create({ data: { participants: { create: [ { user: { connect: { id: "用户ID1" } }, isAdmin: true // 此处可直接设置连接表的isAdmin属性 }, { user: { connect: { id: "用户ID2" } }, isAdmin: false } ] } }, include: { participants: { include: { user: true } } // 可选,返回关联的用户信息 } });
为什么智能提示找不到isAdmin
你之前尝试的方式可能是直接操作User模型的conversations字段,但User.conversations对应的是ConversationRelation数组,而非直接关联Conversation。如果错误地传入Conversation对象而非ConversationRelation的创建参数,智能提示自然不会显示连接表的属性。必须明确操作连接表模型本身,或者在嵌套创建时深入到连接表的创建层级,才能访问到isAdmin这类属性。
内容的提问来源于stack exchange,提问作者SebastianG
相关产品推荐
相关产品推荐

