В Laravel типы связи (отношения) между моделями реализуются через методы, определенные в соответствующих моделях. Эти методы возвращают объекты специальных классов, описывающих тип связи.
Основные типы связей и их методы:
Один к одному (One-to-One)
hasOne(): Используется в модели, которая "владеет" связью (например, User имеет Phone).belongsTo(): Используется в модели, которая "принадлежит" другой модели (например, Phone принадлежит User).Один ко многим (One-to-Many)
hasMany(): Используется в модели, которая может иметь множество связанных моделей (например, User имеет много Post).belongsTo(): Используется в модели, которая принадлежит множеству связанным моделям (один ко многим в обратную сторону, например, Post принадлежит User).Многие ко многим (Many-to-Many)
belongsToMany(): Используется с обеих сторон связи через сводную (промежуточную) таблицу. Например, Post имеет много Tag, и Tag имеет много Post, связанных через таблицу post_tag.Один к одной (полиморфная) (One-to-One Polymorphic)
morphOne(): Используется в модели, к которой могут принадлежать разные типы связанных моделей (например, Post или User имеют Image).morphTo(): Используется в полиморфной связанной модели (Image), чтобы определить, к какой модели она принадлежит (Post или User).Один ко многим (полиморфная) (One-to-Many Polymorphic)
morphMany(): Используется в модели, которая может иметь много связанных моделей разного типа (например, Post или Comment имеют много Image).morphTo(): Используется в полиморфной связанной модели (Image), чтобы определить, к какой модели она принадлежит (Post или Comment).Многие ко многим (полиморфная) (Many-to-Many Polymorphic)
morphToMany(): Используется с обеих сторон связи через сводную полиморфную таблицу. Например, Post или Video могут иметь много Tag, связанных через таблицу taggables.morphedByMany(): Используется в связанной модели (Tag) для определения, к каким типам моделей она может быть прикреплена (Post или Video).Пример реализации hasMany и belongsTo:
php
php
Laravel автоматически предполагает имена внешних ключей и имен связанных таблиц на основе названий моделей. Эти предположения можно переопределить, передавая дополнительные аргументы в методы отношений. Например, hasMany(Post::class, 'author_id') указывает, что внешний ключ в таблице posts называется author_id.