簡體   English   中英

Prisma 中的嵌套寫入

[英]Nested writes in Prisma

我的架構如下所示:

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,
            },
          },
        },
      },
    },
  });

您在此示例中的架構在使用此創建時沒有問題

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
  }
}

也許你的其余隱藏模式內容有問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM