💡

Prismaでリレーション(include)先の型をまとめて取得する

2024/12/17に公開

こんにちは。粘着系エンジニアのbamboo-houseです。
リレーション先の型について、とある方法を使うと自分で定義することなく型を取得することができるので参考にしてみてください!

schema.prisma(モデル定義)

model User {
  id    Int    @id @default(autoincrement())
  posts Post[]
}

model Post {
  id       Int  @id @default(autoincrement())
  author   User @relation(fields: [authorId], references: [id])
  authorId Int
}

リレーション先の型を取得する

prisma generateした後に、

type UserWithPost = Prisma.UserGetPayload<{
    include: {
        posts: true;
    };
}>;
// {
//   posts: {
//     id: number;
//     authorId: number;
//   }[];
// } & {
//   id: number;
// }

// selectで絞り込むこともできます
type UserWithPost = Prisma.UserGetPayload<{
    select: {
        id: true;
        posts: {
            id: true;
        };
    };
}>;
// {
//   id: number;
//   posts: {
//     id: number;
//   }[];
// }

Discussion