このようなテーブルを作ったとき、特定のユーザーと一緒にリレーション先のPostのデータもほしいときがよくあります。
model User {
id String @id @default(auto()) @map("_id") @db.ObjectId
posts Post[]
}
model Post {
id String @id @default(auto()) @map("_id") @db.ObjectId
author User @relation(fields: [authorId], references: [id])
authorId String @db.ObjectId // relation scalar field (used in the `@relation` attribute above)
}
Prismaのクエリにはデフォルトでリレーションが含まれていないので、prisma generate
で生成される型にもリレーションは含まれません。
そのため、このように型を定義する必要があると思われますが、型を作る必要はありません。
type UserWithPosts = {
id: string
email: string
name: string | null
posts: Post[]
}
Prisma.UserGetPayloadユーティリティ関数を使用して、すべてのユーザーとその投稿を返すのに使用できるタイプを作成します。
こうすることでリレーション付きのユーザーの型を取得する
import type { Prisma } from "@prisma/client";
type Props = {
user: Prisma.UserGetPayload<{
include: {
Post: true;
};
}>;
};
Operating against partial structures of your model types | Prisma Documentation
This page documents various scenarios for using the generated types from the Prisma namespace
コメント