1レコードが1テーブルから複数のリレーションを持つ方法。
サンプル
これは以下のPrismaの公式ドキュメントにあるサンプルです。
投稿データのPostテーブルがあり、投稿データは投稿者(author)と投稿固定者(pinnedBy)を持ち、それぞれがユーザーテーブルへのリレーションとなっています。
model User { id Int @id @default(autoincrement()) name String? writtenPosts Post[] @relation("WrittenPosts") pinnedPost Post? @relation("PinnedPost") } model Post { id Int @id @default(autoincrement()) title String? author User @relation("WrittenPosts", fields: [authorId], references: [id]) authorId Int pinnedBy User? @relation("PinnedPost", fields: [pinnedById], references: [id]) pinnedById Int? @unique }
Postテーブルは、カラムautherId とpinnedById を持ち、これらはUserテーブルへの外部キー制約を持ちます。 どちらもUserテーブルのカラムidへのリレーションとなります。 この場合、参照先を明確にする必要があるため、@relationに参照先を区別するユニークな名称を指定します。
間違った例
以下は参照先が曖昧になる間違ったサンプルです。これは npx prisma formatコマンドでエラーになります。
model User { id Int @id @default(autoincrement()) name String? writtenPosts Post[] pinnedPost Post? } model Post { id Int @id @default(autoincrement()) title String? author User @relation(fields: [authorId], references: [id]) authorId Int pinnedBy User? @relation(fields: [pinnedById], references: [id]) pinnedById Int? }