Отношения
Поля отношений связывают ресурсы между собой. Каждый тип соответствует аналогичной Eloquent-связи. Второй аргумент — класс ресурса связанной модели, третий (опциональный) — подпись в интерфейсе.

HasOne
Связь «один к одному». Документация Laravel — One to one.
У User одна запись Profile. В UserResource:
HasOne::make('profile', ProfileResource::class, 'Profile')
Обратная сторона — в ProfileResource:
BelongsTo::make('user', UserResource::class, 'User')
Сигнатура: make(string $field, string $resourceClass, ?string $label = null).
HasMany
Связь «один ко многим». Документация — One to many.
У Excursion — несколько Guide. В ExcursionResource:
HasMany::make('guides', GuideResource::class, 'Guides')
BelongsTo
Обратная сторона для HasOne и HasMany. Документация — One to many inverse.
HasOneThrough
Связь «один к одному» через промежуточную модель. Документация — Has one through.
HasOneThrough::make('postColor', PostColorResource::class, 'Post color')
HasManyThrough
Связь «один ко многим» через промежуточную модель. Документация — Has many through.
HasManyThrough::make('guides', GuideResource::class, 'Guides')
BelongsToMany
Связь «многие ко многим». Документация — Many to many.
У User — несколько Group, у Group — несколько User. В UserResource:
BelongsToMany::make('groups', GroupResource::class, 'Groups')
->fields([
Text::make('role', 'Role'),
])
Обратная сторона в GroupResource:
BelongsToMany::make('users', UserResource::class, 'Users')
->fields([
Text::make('role', 'Role')
->required()
->placeholder('User'),
])
Метод fields() описывает поля промежуточной (pivot) таблицы. Пример схемы:
users
id - integer
name - string
groups
id - integer
name - string
group_user
id - integer
group_id - integer
user_id - integer
role - string
Если промежуточная таблица содержит только ключи — fields() можно опустить.
MorphOne / MorphTo
Полиморфная связь «один к одному». Документация — Polymorphic one-to-one.
У Office один Address, но Address может принадлежать и другим моделям (Shop, Hospital).
В OfficeResource:
MorphOne::make('address', AddressResource::class, 'Address')
Обратная сторона в AddressResource:
MorphTo::make('addressable', [
OfficeResource::class,
ShopResource::class,
], 'Entities')
Второй аргумент MorphTo — массив ресурсов возможных родителей, третий (опциональный) — подпись в интерфейсе.
MorphMany
Полиморфная связь «один ко многим». Документация — Polymorphic one-to-many.
MorphMany::make('comments', CommentResource::class, 'Comments')
->hideOnIndex()
Обратная сторона в CommentResource:
MorphTo::make('commentable', [
PostResource::class,
SpaceResource::class,
], 'Запись')
MorphToMany
Полиморфная связь «многие ко многим». Документация — Polymorphic many-to-many.
MorphToMany::make('tags', TagResource::class, 'Tags')
Inline-создание связанных записей
Метод inlineCreate() позволяет создать связанную запись прямо из селекта — без ухода со страницы формы. Фронтенд показывает кнопку «+ Создать» в выпадающем списке; по клику открывается модальное окно с формой создания связанного ресурса.
BelongsTo::make('type', PostTypeResource::class, 'Тип')
->inlineCreate(),
BelongsTo::make('source', PostSourceResource::class, 'Источник')
->inlineCreate(),
Поддерживаемые связи
- Single (
BelongsTo,HasOne,MorphTo,MorphOne) — inline-создание доступно всегда. - Listable (
HasMany,BelongsToMany,MorphMany,MorphToMany) — только при отображении через->asTag(). - Through (
HasOneThrough,HasManyThrough) — не поддерживается (нужна промежуточная запись).
Контроль доступа
Кнопка появляется только если у пользователя есть право на создание целевого ресурса. Проверка делается через canCreate() ресурса, который дёргает Gate-ability вида <resource-name>.create:
PostTypeResource::name()→post-types→ проверяетсяpost-types.createPostSourceResource::name()→post-sources→post-sources.create
Если вы используете модуль permissions с ResourcePermissions::forResource(), ability генерируется автоматически — достаточно раздать её роли. Без прав — флаг inline_create в ответе API будет false, кнопка скрыта.
canCreate() в классе ресурса.Relation
Родительский класс для всех полей отношений. В ресурсах не используется напрямую — наследуйте от него для собственных типов связей.