phpinnacle / tags
Polymorphic record tagging and management for Laravel Filament applications.
Requires
- php: ^8.4
- filament/filament: ^4.0|^5.0
- phpinnacle/palette: ^1.0
Requires (Dev)
- pestphp/pest: ^4.0
Suggests
None
Provides
None
Conflicts
None
Replaces
None
This package is auto-updated.
Last update: 2026-09-06 22:58:38 UTC
README
Tags adds reusable, polymorphic tagging to Eloquent records and provides the Filament components needed to edit, display, filter and bulk-assign tags.
Features
- Central
Tagmodel with polymorphic record assignments. - Filament
TagsInputform field. TagsColumnfor table display.TagsFilterfor narrowing table records.TagsBulkActionfor assigning tags to multiple records.- Policy-backed tag management, custom connection and optional tenancy.
Installation
composer require phpinnacle/tags
php artisan vendor:publish --tag="phpinnacle-tags-migrations"
php artisan migrate
Register TagsPlugin::make() in the target Filament panel. Publish phpinnacle-tags-config when using a non-default database connection or tenant model.
Filament usage
use PHPinnacle\Tags\Actions\TagsBulkAction; use PHPinnacle\Tags\Filters\TagsFilter; use PHPinnacle\Tags\Forms\TagsInput; use PHPinnacle\Tags\Tables\TagsColumn; TagsInput::make('tags'); TagsColumn::make('tags'); TagsFilter::make('tags'); TagsBulkAction::make();
The filter uses the table model's morph class to load available tags, including any registered morph alias. Use TagsFilter::make()->model($type) to explicitly select the type stored in tags.type.
The tagged model must expose the relationship expected by these components. Follow the relation naming and morph contract used by Tag and the package migration when integrating an existing model. Authorization for tag records is handled by TagPolicy.
Tag definitions and assignments use phpinnacle-tags.connection, including bulk transactions and reads/removals. Tagged models may live on another connection: bulk assignment checks selected IDs on their source connection and writes only to the tag database. Deleted source records are skipped, repeat assignment is idempotent, and a failed bulk operation rolls back its tag definitions and assignments together.
Testing
composer test
To exercise tag writes on PostgreSQL while source records remain on another connection, use a dedicated test database:
TAGS_PGSQL_URL=postgresql://user:password@localhost/test_database vendor/bin/pest packages/tags/tests --no-coverage
Changelog and license
See CHANGELOG. Released under the MIT License.