birgersp
birgersp

Reputation: 4916

Prisma client create a "child" object?

I am trying to find examples of how to create a "child" object in prisma client.

Let's say this is my schema (fake example):

model User {
    id: string,
    posts: Post[]
}

model Post {
    userId: int,
    user: User
}

So in this example I am refering to a "child" as a Post of a User.

Now, let's say that I already "have" the user object. How then do I create a Post for this user?

let user = await prismaClient.user.upsert({
    where: {id: "someId"},
    update: {},
    create: {id: "someId"}
}

user.createPost (???) // <--- What do I write here?

Upvotes: 1

Views: 2938

Answers (1)

Nurul Sundarani
Nurul Sundarani

Reputation: 7568

Consider this prisma schema.

datasource db {
  url      = env("DATABASE_URL")
  provider = "postgresql"
}

generator client {
  provider = "prisma-client-js"
}

model User {
  id        Int      @id @default(autoincrement())
  createdAt DateTime @default(now())
  email     String   @unique
  name      String?
  role      Role     @default(USER)
  posts     Post[]
}

model Post {
  id        Int      @id @default(autoincrement())
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
  published Boolean  @default(false)
  title     String   @db.VarChar(255)
  author    User?    @relation(fields: [authorId], references: [id])
  authorId  Int?
}

This is how you could create posts, while linking it to user created through upsert.

  let user = await prismaClient.user.upsert({
    where: {id: "someId"},
    update: {},
    create: {id: "someId"}
}

  await prisma.postA.create({
    data:{
      title: 'Post for prisma',
      authorId: user.id
    }
  })
}

You can learn about nested writes from this reference.

Upvotes: 1

Related Questions