Filament Model Merger

Stop duplicating data.
Start merging it.

Merge duplicate records in your Filament panels with a side-by-side comparison UI. Automatic relation transfer, audit logging, and full control via lifecycle hooks.

Filament v3

Full support for Filament v3.

Laravel 10, 11 & 12

Compatible with all modern Laravel versions.

PHP 8.1+

Uses modern PHP features and strict typing.

Everything you need for record merging.

Handle duplicates properly — transfer relations, keep audit trails, and maintain data integrity.

Side-by-side record comparison.

Select two records and see every field side by side. Choose which values to keep, review differences at a glance, and merge with confidence.

php
use PtPlugins\FilamentModelMerger\Actions\MergeAction;

public static function table(Table $table): Table
{
    return $table
        ->columns([...])
        ->actions([
            MergeAction::make(),
        ]);
}
Field-by-field comparison view
Select which record to keep as primary
Visual diff highlighting for different values
Confirmation modal before merge

HasMany

Transfer child records

HasOne

Reassign one-to-one

BelongsToMany

Merge pivot tables

MorphMany

Move polymorphic children

MorphOne

Reassign morph one

MorphToMany

Merge morph pivots

Automatic relation transfer.

All 6 Eloquent relation types are handled automatically. Child records, pivot tables, and polymorphic relations are transferred to the primary record. No data is lost.

Complete audit trail.

Every merge operation is logged with full snapshots of both records before the merge. The polymorphic MergeLog model makes it easy to track who merged what, and when.

php
// MergeLog stores:
// - primary_record (morphTo)
// - merged_record_snapshot (JSON)
// - primary_record_snapshot (JSON)
// - performed_by (user who merged)
// - merged_at (timestamp)
Full JSON snapshots of both records
Polymorphic — works with any model
Track which user performed the merge
Queryable merge history per record
php
use PtPlugins\FilamentModelMerger\Contracts\Mergeable;

class Customer extends Model implements Mergeable
{
    public function getMergeableFields(): array
    {
        return ['name', 'email', 'phone', 'address'];
    }

    public function getMergeStrategy(): string
    {
        return 'soft-delete'; // or 'hard-delete'
    }
}

Configurable merge strategy.

Choose between soft-delete and hard-delete for the merged record. Define exactly which fields are mergeable through the Mergeable interface. Full control, zero surprises.

More reasons you'll love Filament Model Merger

Built for real-world data problems. Every feature designed to keep your data clean.

Lifecycle Hooks

Run custom logic before and after every merge with beforeMerge() and afterMerge() hooks.

Filament Resource Integration

Add merge functionality to any Resource with a single MergeAction. Works with tables and bulk actions.

Mergeable Interface

Control exactly which fields can be merged and how. Your models define the rules.

Transaction Safety

All merge operations run inside a database transaction. If anything fails, everything rolls back.

i18n Ready

Full translation support. Ships with English and Serbian. Add your own language in minutes.

Deduplication Integration

Pairs perfectly with Filament Deduplication. Detect duplicates first, then merge them with one click.

Get started in 3 steps

From purchase to merging records in your Filament panel — it only takes a few minutes.

1

Create an account

Register for free. No credit card required until you purchase.

2

Purchase a license

Choose Solo or Unlimited. Secure payment via Paddle. Instant access.

3

Install via Composer

Add our private repository and composer require — done.

Pricing plans

Choose the plan that fits your needs. Keep using your current version forever, even after your update period ends.

Solo

$49 / 1 site / 1 year updates

Perfect for freelancers and individual developers working on a single project.

Get immediate access

After a year, optionally renew for $29 to continue receiving updates or stay on your current version forever.

Unlimited

Popular
$149 / unlimited sites / 1 year updates

For developers and agencies building multiple client projects.

Get immediate access

After a year, optionally renew for $89 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

Save 20%

Better together — Data Quality Bundle

Get Filament Model Merger + Filament Deduplication together and save 20%. Detect duplicates, review them, and merge — all in one workflow.

View Bundle →

Frequently asked questions

Everything you need to know about Filament Model Merger

Model Merger handles all 6 relation types: HasMany, HasOne, BelongsToMany, MorphMany, MorphOne, and MorphToMany. All child records and pivot entries are automatically transferred to the primary record during merge.

You choose the strategy: soft-delete keeps the record in the database (marked as deleted), or hard-delete permanently removes it. Both options transfer all relations first.

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.

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 ($100).

Absolutely. The two plugins are designed to work together. Deduplication detects potential duplicates and shows a "Merge" link that opens the Model Merger comparison page directly.

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.

Ready to clean up your data?

Start merging duplicate records in minutes. 7-day money-back guarantee.