Атрибут @relation
указывает на существование отношений между моделями (таблицами).
name?: string
— название отношения;fields?: [field1, field2, ...fieldN]
— список полей текущей модели (в нашем случае это [author_id]
модели Post
,
обратите внимание: само поле определяется отдельно);references: [field1, field2, ...fieldN]
— список полей другой модели (стороны отношений) (в нашем случае это [id]
модели User
).one-to-one
, 1-1
);one-to-many
, 1-n
);many-to-many
, m-n
).Атрибут @relation
является обязательным только для отношений 1-1
и 1-n
.
model User {
id Int @id @default(autoincrement())
posts Post[]
profile Profile?
}
model Profile {
id Int @id @default(autoincrement())
user User @relation(fields: [userId], references: [id])
userId Int
}
model Post {
id Int @id @default(autoincrement())
author User @relation(fields: [authorId], references: [id])
authorId Int
categories Category[]
}
model Category {
id Int @id @default(autoincrement())
posts Post[]
}
User
и Profile
существуют отношения 1-1
— у одного пользователя может быть только один профиль;User
и Post
существуют отношения 1-n
— у одного пользователя может быть несколько постов;Post
и Category
существуют отношения m-n
— один пост может принадлежать к нескольким категориям,
в одну категорию может входить несколько постов.