zvizvi/relation-manager-repeater
Installation:
composer require zvizvi/relation-manager-repeater
Publish the config (if needed):
php artisan vendor:publish --provider="Zvizvi\RelationManagerRepeater\RelationManagerRepeaterServiceProvider"
First Use Case:
Add the RelationManagerRepeaterAction to a Filament 4 RelationManager:
use Zvizvi\RelationManagerRepeater\Tables\RelationManagerRepeaterAction;
class PostsRelationManager extends RelationManager
{
protected static string $relationship = 'posts';
public function table(Table $table): Table
{
return $table
->columns([/* ... */])
->headerActions([
RelationManagerRepeaterAction::make(),
]);
}
}
Inline Bulk Editing:
title and status for 10 Post models simultaneously).RelationManagerRepeaterAction::make()
->columns([
TextColumn::make('title'),
SelectColumn::make('status')->options(['draft', 'published']),
])
->bulkActions([/* ... */]);
Conditional Repeater Logic:
RelationManagerRepeaterAction::make()
->can([
fn ($livewire) => $livewire->getOwnerRecord()->can('manage_posts'),
]);
Custom Repeater Fields:
->columns([
ToggleColumn::make('is_featured'),
DatePickerColumn::make('published_at'),
]);
Integration with Filament Forms:
use Zvizvi\RelationManagerRepeater\Components\RepeaterColumn;
$this->form([
RepeaterColumn::make('posts')
->columns([
TextInput::make('title'),
]),
]);
Bulk Actions:
->bulkActions([
Tables\Actions\DeleteAction::make(),
Tables\Actions\DuplicateAction::make(),
]);
Performance with Large Datasets:
RelationManagerRepeaterAction::make()
->perPage(50);
Model Casting Issues:
published_at as Carbon). Repeater may fail silently on invalid data types.CSRF Token Conflicts:
RelationManagerRepeaterAction::make()
->extraAttributes(['csrf_token' => csrf_token()]);
Relationship Ownership:
$relationship causes "not found" errors.APP_DEBUG=true) to inspect repeater payloads./filament/relation-manager-repeater.RelationManagerRepeaterAction::make()
->modifyQueryUsing(fn (Builder $query) => $query->where('active', true));
Custom Repeater UI:
resources/views/vendor/filament-relation-manager-repeater/modal.blade.php.Event Hooks:
relation-manager-repeater.saving or relation-manager-repeater.saved events:
event(new RelationManagerRepeaterEvent($records, $action));
Localization:
RelationManagerRepeaterAction::make()
->label(__('filament-relation-manager-repeater::repeater.label'));
Testing:
RelationManagerRepeaterAction::make()->test() to simulate repeater interactions in PHPUnit:
$this->callAction('repeater');
How can I help you explore Laravel packages today?