A three-way, IDE-style merge for FilamentPHP. Primary and duplicate side by side, a live Result column in the middle — pick the winning value for every field and relation, preview the outcome, then commit. Nothing lost, nothing guessed.
Filament v3, v4 & v5
One package for every modern Filament version.
Laravel 10, 11 & 12
Compatible with all supported Laravel releases.
PHP 8.1+
Modern PHP with strict typing throughout.
No blind “keep the newest” guesswork. See every difference, decide every conflict, and preview the result before a single row is touched.
Identical fields resolve themselves and fade into the background — only real conflicts ask for a decision. For each one, keep the primary value or take the target’s with a single click, or resolve them all at once with Use primary / Use target.
Merging is destructive — so nothing is written until you say so. A dry-run preview lists exactly which fields move, how each relation is transferred, and warns you that the target record will be permanently deleted. No surprises, no irreversible mistakes.
Add a Merge row action to any Filament Resource — no new screens to learn. Pair it with Filament Deduplication to scan for near-duplicates (exact, similar-text, levenshtein and numeric-range matching) and merge them straight from the same table.
use PtPlugins\FilamentModelMerger\Concerns\HasMergeableFields;
use PtPlugins\FilamentModelMerger\Actions\MergeAction;
class ProductResource extends Resource
{
use HasMergeableFields;
// Relations transferred during a merge
public static function getMergeableRelations(): array
{
return ['variants', 'tags', 'orderItems'];
}
public static function table(Table $table): Table
{
return $table->actions([
MergeAction::make(),
]);
}
}
Add one trait, list the relations to transfer, and register the merge page. Curate the
comparison view with a typed infolist so money, dates and related labels render properly —
not raw columns. beforeMerge()
and afterMerge() hooks give you the final say.
Every merge is safe, auditable and fully under your control.
Every merge writes a MergeLog with JSON snapshots of both records, who performed it, and when. Polymorphic — works with any model.
Every merge runs inside a database transaction. If anything fails, the whole operation rolls back — no half-merged records.
beforeMerge() to veto a merge, afterMerge() to run cleanup. Full control over the merge lifecycle from your own model.
HasMany, HasOne, BelongsToMany, MorphMany, MorphOne and MorphToMany are transferred automatically. No child records left behind.
Define a typed infolist so fields render with the right formatting — money, dates and related labels instead of raw column values.
Ships with English and Serbian out of the box. Add your own language with a single translation file.
From purchase to merging records in your Filament panel — it only takes a few minutes.
Register for free. No credit card required until you purchase.
Choose Solo or Unlimited. Secure payment via Paddle. Instant access.
Add our private repository and composer require — done.
Choose the plan that fits your needs. Keep using your current version forever, even after your update period ends.
Perfect for freelancers and individual developers working on a single project.
Coming soonAfter a year, optionally renew for $19 to continue receiving updates or stay on your current version forever.
For developers and agencies building multiple client projects.
Coming soonAfter a year, optionally renew for $59 to continue receiving updates or stay on your current version forever.
| Solo | Unlimited | |
|---|---|---|
| Activations | 1 site | Unlimited |
| 1 year of updates included | ||
| Use current version forever | ||
| All core features | ||
| Composer access via Satis | ||
| Full source code | ||
| E-mail support | ||
| Priority support | — |
Invoice available
Download after purchase
E-mail support
Get help when you need it
Regular updates
Continuously improved
Get Filament Model Merger + Filament Deduplication together and save 20%. Detect duplicates, review them, and merge — all in one workflow.
View Bundle →Everything you need to know about Filament Model Merger
Model Merger is a three-way, field-level merge. You see the primary and duplicate side by side with a live Result column in the middle, decide each conflicting field and relation individually, and preview the outcome before committing. Nothing is guessed or silently overwritten.
All 6: HasMany, HasOne, BelongsToMany, MorphMany, MorphOne and MorphToMany. For each relation you choose Keep primary, Merge all, or Take target — and the UI shows exactly how many records each choice produces.
You choose the strategy: it can be permanently deleted or soft-deleted. Either way, all selected relations are transferred to the primary record first, and the whole operation is logged.
Yes. Every merge creates a MergeLog record with full JSON snapshots of both records before the merge, the user who performed it, and a timestamp. The log uses a polymorphic relation so it works with any model.
Yes. A single license covers Filament v3, v4 and v5, on Laravel 10, 11 and 12. You install the version matching your Filament major from the same private repository.
Absolutely. The two are designed to work together: Deduplication detects near-duplicates with configurable matching rules and shows a "Merge" link that opens the three-way comparison directly.
After your first year, you can optionally renew your license at a discounted rate to continue receiving updates. If you choose not to renew, you keep permanent access to the version you had when your update period expired.
Yes! Contact us at mihailo@ptplugins.com and we'll apply a prorated upgrade — you only pay the difference ($60).
Yes, we offer a 7-day money-back guarantee. If the plugin doesn't work for your use case, contact us and we'll process a full refund. See our refund policy for details.
See the three-way merge for yourself in the live demo — no signup required.