You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Remix/Prisma中多对多关系插入问题求助

解决Prisma多对多关联创建文章时的TypeScript错误

错误原因分析

  1. 必填字段缺失:中间表TagsOnPosts的assignedBy字段无默认值,属于必填项,创建中间表记录时必须提供该值。
  2. 错误字段传入:原代码中tagsCreate里的name字段属于Tag模型,并非中间表字段,属于冗余错误输入。
  3. Post关联缺失:Post模型要求必须关联User,原创建代码未传入userId,违反模型约束。

修正后的实现代码

export async function createPost(
  post: Pick<Post, "slug" | "title" | "markdown" | "postImageUrl">,
  tags: string[],
  userId: string // 传入当前用户ID,用于填充assignedBy字段
) {
  const tagsCreate = tags.map((tag) => ({
    assignedBy: userId, // 补充中间表必填的assignedBy字段
    tag: {
      connectOrCreate: {
        where: { name: tag },
        create: { name: tag },
      },
    },
  }));

  return prisma.post.create({
    data: {
      ...post,
      userId, // 关联当前用户,满足Post模型的必填约束
      tags: {
        create: tagsCreate,
      },
    },
  });
}

代码说明

  • connectOrCreate逻辑:针对每个标签,若数据库中已存在同名标签则直接关联到当前文章;若不存在则创建新标签并完成关联,完全匹配你要求的"自动创建不存在的标签、关联已存在标签"的需求。
  • 中间表必填项处理:通过传入的userId填充assignedBy字段,满足TagsOnPosts模型的必填要求。
  • 简化字段赋值:使用扩展运算符...post简化Post基础字段的赋值,代码更简洁易读。

内容的提问来源于stack exchange,提问作者Ms01

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 18:24:51