【问题标题】:Many-to-Many relationship Prisma update多对多关系 Prisma 更新
【发布时间】:2021-07-23 06:20:24
【问题描述】:

我有 2 张桌子。 Member & Event 的想法是每个成员可以参加 0 个或多个活动。每个事件可以有 0 个或多个成员。 事件已经存在,代码应该只是根据他们的 ID 将事件添加到成员。

架构模型:

model Member {
  id             String   @id @default(uuid())
  firstName      String
  lastName       String
  emailAddress   String
  mobileNumber   String
  whatsAppNumber String   @default("null")
  password       String
  createdAt      DateTime @default(now())
  updatedAt      DateTime @updatedAt
  events         Event[]
}

model Event {
  id           String   @id @default(uuid())
  name         String
  date         DateTime
  meetingPoint String
  meetingTime  String
  details      String
  members      Member[]

}

问题是,我无法弄清楚如何向现有成员添加活动。在线资源也不行。

查询代码:

exports.registerForEvent = async (req, res, next) => {
  try {
    const { memberId, eventId } = req.body;

    const _event = await prisma.event.findUnique({ where: { id: eventId } });

    if (_event) {
      const _member = await prisma.member.upsert({
        where: { id: memberId },
        update: {
          events: _event,
        },
      });

      if (_member) {
        res.status(200).send("OK");
      } else {
        generateError("Failed", req, next);
      }
    }
  } catch (err) {
    generatDefaultError(err, req, next);
  }
};

控制台错误:

PrismaClientValidationError:
Invalid `prisma.member.upsert()` invocation:

{
  where: {
    id: '40d00e11-cfe7-4707-8f19-0c13cd7e7fc7'
  },
  update: {
    events: {
    ~~~~~~
      id: '52294035-3a4e-431a-ae1c-b2f12525dc3e',
      name: 'Event Name',
      date: new Date('2021-01-14T20:00:00.000Z'),
      meetingPoint: 'Meeting Point',
      meetingTime: 'Meeting Time',
      details: 'Event details'
    }
  },
+ create: MemberCreateInput | MemberUncheckedCreateInput
}

Unknown arg `events` in update.events for type MemberUncheckedUpdateInput. Did you mean `posts`?
Argument create is missing.

Note: Lines with + are required

我是 Prisma 的新手,我正在努力思考它是如何工作的。任何帮助将不胜感激。

【问题讨论】:

    标签: node.js express prisma


    【解决方案1】:

    所以我设法通过大量的试验和错误来解决这个问题。我想在这里发布答案,以防其他人正在寻找类似的解决方案:

    这里的关键字是使用connect

    工作代码:

    exports.registerForEvent = async (req, res, next) => {
      try {
        const { memberId, eventId } = req.body;
    
        // Find the event by it's ID
        const _event = await prisma.event.findUnique({ where: { id: eventId } });
    
        // Find the member by their ID
        const _member = await prisma.member.update({
          where: { id: memberId },
          data: {
            events: {
              connect: [{ id: _event.id }], // connect that member with the event ID
            },
          },
        });
    
        if(_member) {
            res.status(200).send("ok")
        }
      } catch (err) {
        generatDefaultError(err, req, next);
      }
    };
    

    【讨论】:

      猜你喜欢
      • 2021-12-04
      • 2021-04-11
      • 2022-01-27
      • 2021-08-24
      • 1970-01-01
      • 2021-10-03
      • 2021-09-17
      • 2023-01-27
      • 2021-06-30
      相关资源
      最近更新 更多