【问题标题】:Nested writes in PrismaPrisma 中的嵌套写入
【发布时间】:2021-01-19 08:41:54
【问题描述】:

我的架构如下所示:

model User {
  id             Int       @default(autoincrement()) @id
  createdAt      DateTime  @default(now())
  email          String    @unique
  role           String    @default("user")
  sessions       Session[]
  profile        Profile?
  goalBoard      GoalBoard[]
  team           Team[]
  ...
}

model GoalBoard {
  id          Int         @default(autoincrement()) @id
  active      Boolean    // Whether an active goalBoard
  owner       User        @relation(fields: [ownerId], references: [id])
  ownerId     Int
  createdAt   DateTime    @default(now())
  goal        Goal[]
  ...
}

model Goal {
  id               Int         @default(autoincrement()) @id
  status           String
  createdAt        DateTime    @default(now())
  owner            User        @relation(fields: [ownerId], references: [id])
  ownerId          Int
  goalBoard        GoalBoard   @relation(fields: [goalBoardId], references: [id])
  goalBoardId      Int
  content          String
  goalFrequency    GoalFrequency[]
  task             Task[]
}

model Task {
  id          Int         @default(autoincrement()) @id
  status      String     // incomplete, complete
  createdAt   DateTime    @default(now())
  content     String
  goal        Goal        @relation(fields: [goalId], references: [id])
  goalId      Int
}

我正在编写一个突变函数,它采用 goal 对象的数组。这些goal 对象具有task 对象的嵌套数组。它看起来像这样:

const goals = [
  {
    title: 'string',
    ...
    tasks: [
      {
        deadline: "2020/10/10",
        ...
      }
    ]
  },
  ...
]

我将如何使用 Prisma2 处理这种结构?需要多次写入和connectOrCreate 逻辑。

这是我在 Db 中写入插入的失败尝试。只需一次插入和连接即可进行测试。

  const returnGoals = await db.goal.create({
    data: {
      content: "test goal",
      owner: {
        connect: {
          id: ctx.session!.userId,
        },
      },
      goalBoard: {
        create: { // warns that create is incorrectly used here
          active: true,
          owner: {
            connect: {
              id: ctx.session!.userId,
            },
          },
        },
      },
    },
  });

【问题讨论】:

    标签: javascript database prisma prisma2


    【解决方案1】:

    您使用此示例的架构在使用此创建时没有问题

    import { PrismaClient } from '@prisma/client';
    
    const prisma = new PrismaClient();
    
    async function main() {
      prisma.$connect();
      const user = await prisma.user.create({
        data: {
          email: 'a@ahmedelywa.com',
        },
      });
      const result = await prisma.goal.create({
        data: {
          content: 'test content',
          status: 'any',
          owner: {
            connect: {
              id: user.id,
            },
          },
          goalBoard: {
            create: {
              active: true,
              owner: {
                connect: {
                  id: user.id,
                },
              },
            },
          },
        },
        include: {
          owner: true,
          goalBoard: true,
        },
      });
    
      console.log(result);
    }
    
    main();
    

    结果

    {
      id: 1,
      status: 'any',
      createdAt: 2020-10-04T10:53:40.956Z,
      ownerId: 1,
      goalBoardId: 1,
      content: 'test content',
      owner: {
        id: 1,
        createdAt: 2020-10-04T10:53:40.949Z,
        email: 'a@ahmedelywa.com',
        role: 'user'
      },
      goalBoard: {
        id: 1,
        active: true,
        ownerId: 1,
        createdAt: 2020-10-04T10:53:40.956Z
      }
    }
    

    也许您对其余隐藏架构内容的问题

    【讨论】:

      猜你喜欢
      • 2021-11-21
      • 2019-10-12
      • 1970-01-01
      • 2020-01-31
      • 2020-08-02
      • 2019-05-26
      • 1970-01-01
      • 2021-09-09
      • 2020-12-22
      相关资源
      最近更新 更多