【问题标题】:How to create or update many-to-many relation in Prisma?如何在 Prisma 中创建或更新多对多关系?
【发布时间】:2022-01-27 03:48:10
【问题描述】:

我有以下模型,以及它们之间的多对多关系:

model User {
  id            String    @id @default(cuid())
  name          String?
  email         String?   @unique
  followings    Artist[]
}

model Artist {
  id           String @id @default(cuid())
  name         String @unique
  spotifyId    String @unique
  followers    User[]
}

当用户登录我的应用时,我会检索他们当前关注的艺术家,并且需要更新我的数据库。

我已设法从数据库中选择艺术家数据(用于更新用户 艺术家关系),示例数据:

const followings = [
  {
    id: '...',
    name: 'MARINA',
    spotifyId: '6CwfuxIqcltXDGjfZsMd9A'
  },
  {
    id: '...',
    name: 'Dua Lipa',
    spotifyId: '6M2wZ9GZgrQXHCFfjv46we'
  },
]

现在,这是我的用户对象:

const user = {
  id: 'someId',
  name: 'someName',
  email: 'someEmail'
}

我尝试使用此查询插入或更新用户 艺术家关系,但我收到 Bad Request 错误:

await prisma.user.upsert({
    where: {
        email: user.email
    },
    create: {
        name: user.name,
        email: user.email,
        followings: {
            connectOrCreate: followings
        }
    },
    update: {
        followings: {
            connectOrCreate: followings
        }
    }
})

请告知我需要做什么。提前致谢。

附:我从Updating a many-to-many relationship in Prisma 帖子中获取了查询的想法,但它对我不起作用,所以请不要标记重复。

【问题讨论】:

    标签: sql many-to-many prisma


    【解决方案1】:

    connectOrCreate 应指定带有 id 的 where 键(以便 Prisma 可以找到该实体)和带有所有必需模型字段的 create 键(如果它不存在,Prisma 可以创建它),但您只需传递一个模型数组。将您的代码更改为以下代码:

      await prisma.user.upsert({
        where: {
          email: 'user.email',
        },
        create: {
          name: 'user.name',
          email: 'user.email',
          followings: {
            connectOrCreate: [
              {
                create: {
                  name: 'MARINA',
                  spotifyId: '6CwfuxIqcltXDGjfZsMd9A',
                },
                where: { id: '...' },
              },
            ],
          },
        },
        update: {
          followings: {
            connectOrCreate: [
              {
                create: {
                  name: 'MARINA',
                  spotifyId: '6CwfuxIqcltXDGjfZsMd9A',
                },
                where: { id: '...' },
              },
            ],
          },
        },
      });
    

    【讨论】:

      猜你喜欢
      • 2021-09-17
      • 2021-04-11
      • 2021-07-23
      • 2022-01-27
      • 2021-12-04
      • 2021-07-25
      • 1970-01-01
      • 2021-05-03
      • 2022-10-25
      相关资源
      最近更新 更多