rawshan008/filament-tag-manager
Filament Tag Manager adds a complete tagging system to your Filament admin panels: create and manage colored tags, attach them to any Eloquent model via polymorphic relations, and filter records by tag. Simple to install and configure, it gives you a ready-to-use tagging UI without building one your...
composer require rawshan008/filament-tag-manager:^1.0 — pin the major. This is the first stable release, and the v1.0.0 notes contain nothing but a changelog link, so there is no documented API contract yet; treat 1.0.0 as the baseline you diff future tags against.README.md, composer.json (require block for Filament/Laravel/PHP constraints), src/, and database/migrations/. Read those before running anything.php artisan vendor:publish --tag="filament-tag-manager-config" and ...-migrations), review the published config (table names, model overrides, morph map key), then php artisan migrate.Filament\Forms\Components classes or a plugin class that fails to satisfy the contract.->plugin(TagManagerPlugin::make())) and check whether it auto-registers a TagResource; if it doesn't, scaffold your own resource against the package's Tag model.Post) — drop the package's tag form component into PostResource::form() and its badge/column into the table, then confirm the pivot rows land in the tags table. Do this before touching the tag vocabulary UI so you validate the polymorphic wiring early.Post, and keep the package's Tag model untouched unless you need behaviour changes (extend via config model override rather than editing vendor files).TagResource (with policies limiting create/delete to admins), and restrict editors to selecting existing tags in the form component. This keeps the taxonomy clean and avoids typo-duplicates like Laravel / laravel / laravel .createOptionForm() / searchable() options, enable creation for trusted roles only. Pair it with a unique index on the tag slug in a follow-up migration if the package doesn't ship one.SelectFilter::make('tags')->relationship('tags', 'name')) into list tables; this is the highest-value day-to-day integration — tagging is only useful when you can slice index pages by it.Post::whereHas('tags', fn ($q) => $q->whereIn('slug', $slugs)), always eager-loading with('tags') to avoid N+1 in resources and API transformers.tenant_id to the tags table and a global scope on your extended model — do this before production data exists, since the polymorphic pivot makes retrofitting messy.composer.lock.taggable_type; if you later call Relation::enforceMorphMap(), existing rows keep the old FQCN and silently stop resolving. Set the morph map before tagging, or write a data migration.App\Models\Post orphans every tag association for it.->with('tags') (or Filament's modifyQueryUsing) is a classic 50-query page. Check the query log on the list page during setup.Tag model's saved/deleted events — otherwise new tags don't appear in the panel until the TTL expires, which reads as a bug.onDelete('cascade') on the taggable foreign key; if not, deleting a tag leaves orphan pivot rows that show up as empty badges.vendor/rawshan008/... guarantees a painful upgrade once 1.0.x patches land.How can I help you explore Laravel packages today?