Relation manager - таблиця пов'язаних записів, що показується під формою редагування чи переглядом запису ресурсу: коментарі поста, товари категорії, ролі користувача.
php artisan make:filament-relation-manager CategoryResource posts title
Після створення його реєструють у ресурсі:
public static function getRelations(): array
{
return [PostsRelationManager::class];
}
Attach чи associate - залежить від типу зв'язку:
| Дії | Зв'язок | Що відбувається |
|---|---|---|
AttachAction, DetachAction, DetachBulkAction |
BelongsToMany, MorphToMany |
рядок у pivot-таблиці додається чи видаляється, сам запис лишається |
AssociateAction, DissociateAction |
HasMany, MorphMany |
у пов'язаного запису змінюється зовнішній ключ (чи стає null) |
CreateAction, EditAction, DeleteAction |
будь-який | створення, редагування й видалення самих пов'язаних записів |
Прапорці --attach і --associate команди генерації одразу додають відповідні дії.
Detach проти Delete: DetachAction лише розриває зв'язок, а DeleteAction видаляє сам запис - для всіх, хто з ним пов'язаний. Плутанина тут коштує даних.
Режим лише для читання. На сторінці перегляду (ViewRecord) relation manager-и за замовчуванням ховають дії зміни - щоб сторінка перегляду лишалася переглядом. Вимкнути можна для одного менеджера (перевизначити isReadOnly() і повернути false) або для всієї панелі через ->readOnlyRelationManagersOnResourceViewPagesByDefault(false).
Нестандартна назва зворотного зв'язку: Filament обмежує запити через зворотний зв'язок (від поста до категорії). Якщо він називається не за правилами Laravel - ->inverseRelationship('section') у table().
Бейджі на вкладці:
public static function getBadge(Model $ownerRecord, string $pageClass): ?string
{
return (string) $ownerRecord->posts()->count();
}
Пам'ятайте, що це запит на кожне відкриття сторінки - для важких підрахунків є відкладене завантаження бейджів.
Доступ: canViewForRecord() за замовчуванням перевіряє політику viewAny пов'язаної моделі. CreateAction, EditAction, DeleteAction перевіряють відповідні методи політики (create, update, delete). А от AttachAction, DetachAction, AssociateAction і DissociateAction політику за замовчуванням не перевіряють - лише режим «тільки для читання». Якщо прив'язувати записи можна не всім, обмежте ці дії явно (->authorize(...) чи ->visible(...)), інакше будь-хто з доступом до сторінки редагування може змінювати зв'язки.
М'яке видалення: прапорець --soft-deletes додає фільтр видалених, відновлення й остаточне видалення.