5. Связи между моделями
Одна из сильнейших сторон Prisma — декларативное описание связей между моделями прямо в схеме. Prisma автоматически генерирует типы для всех связей и предоставляет удобный API для работы с ними.
Типы отношений
Заголовок раздела «Типы отношений»Prisma поддерживает три вида отношений:
- Один-к-одному (1:1) — каждая запись связана ровно с одной записью другой модели
- Один-ко-многим (1:N) — одна запись связана со многими записями другой модели
- Многие-ко-многим (N:M) — множество записей связано со множеством других записей
Атрибут @relation
Заголовок раздела «Атрибут @relation»Атрибут @relation явно описывает связь. Он принимает поля fields (колонки-ключи в текущей таблице) и references (колонки, на которые они ссылаются):
model Post { author User @relation(fields: [authorId], references: [id]) authorId Int}Неявные и явные связи N:M
Заголовок раздела «Неявные и явные связи N:M»Prisma поддерживает два варианта связи многие-ко-многим:
- Неявная — Prisma автоматически создаёт промежуточную таблицу
- Явная — вы описываете промежуточную модель сами, что позволяет добавить к ней дополнительные поля
Каскадное удаление
Заголовок раздела «Каскадное удаление»С помощью аргументов onDelete и onUpdate в @relation можно настроить каскадное поведение:
model Post { author User @relation(fields: [authorId], references: [id], onDelete: Cascade) authorId Int}