Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти Інструменти Події
Інше
Про нас Реклама
Middle Filament

Як обрати між Select, Repeater і relation manager для зв'язків у ресурсі Filament?

Filament дає три основні способи працювати зі зв'язками, і вибір залежить від типу зв'язку та обсягу даних.

1. Select / CheckboxList з relationship() - вибрати наявні записи прямо у формі. Підходить для BelongsTo, MorphTo і BelongsToMany:

Select::make('author_id')
    ->relationship('author', 'name')
    ->searchable()
    ->preload();

Select::make('tags')
    ->multiple()
    ->relationship(titleAttribute: 'name');   // зберігається в pivot-таблицю

Зміни зберігаються разом з основною формою.

2. Repeater з relationship() - редагувати кілька дочірніх записів (HasMany) усередині форми батька: позиції замовлення, телефони контакту. Добре, коли записів небагато і вони не мають сенсу окремо від батька.

3. Relation manager - окрема інтерактивна таблиця під формою редагування чи перегляду. Підтримує HasMany, HasManyThrough, BelongsToMany, MorphMany, MorphToMany:

php artisan make:filament-relation-manager CategoryResource posts title
public static function getRelations(): array
{
    return [PostsRelationManager::class];
}

У ньому є пошук, фільтри, пагінація, дії створення, редагування, AttachAction/DetachAction, AssociateAction.

Як обирати:

Ситуація Інструмент
вибрати одного автора чи кілька тегів Select
2-10 залежних рядків, що редагуються разом з батьком Repeater
десятки й сотні пов'язаних записів, потрібні пошук і пагінація relation manager

Що варто знати про relation managers:

  • вони завантажуються ліниво і зберігають зміни одразу, а не разом із формою батька;
  • на сторінці перегляду вони за замовчуванням лише для читання;
  • фільтр списку в модальному вікні AttachAction - це лише відображення. Обмежити, які записи взагалі можна приєднати, треба через recordSelectOptionsQuery(), інакше підроблений запит приєднає будь-який запис.

Докладніше в документації: Керування зв'язками

Перевір себе

20 випадкових питань за спробу, після завершення - розбір кожної помилки

Схожі питання