bernskiold/laravel-record-merge
Bernskiold Laravel Record Merge helps you safely combine duplicate Eloquent models, moving related records and resolving conflicts so you can clean up your database without losing data or breaking relationships.
laravel-record-merge targets the recurring "we have three copies of the same customer/company/contact" problem. This release doesn't add capability, but it makes the package's eventing contract trustworthy — which is the part a PM actually depends on for user-facing behaviour.fail() renamed to failed() so the failure event actually fires — means that before this version, a failed merge could pass silently with no event emitted. Any roadmap item depending on "notify support when a merge fails," retry queues, or audit logging was previously unbuildable on 0.2.0. As of 0.2.1 it is, so those stories can be scoped and estimated rather than deferred.fail() → failed() rename shipped in a patch release (0.2.1). For a pre-1.0 package that's defensible, but it means any internal listener, subclass, or test double calling fail() will break on upgrade. Treat "we must pin ≥0.2.1 and audit our listeners" as an explicit adoption task, not an afterthought.Adopt when:
>=0.2.1 specifically, since earlier 0.2.x releases will not fire failure events.Look elsewhere or build in-house when:
To executives: Duplicate records cost sales and support real time and make reporting unreliable. Rather than fund a bespoke merge engine, we can adopt a small Laravel package that handles the hard part (moving relationships and resolving conflicting fields) and spend our effort on the visible experience and on audit controls. The 0.2.1 release closes a gap that mattered to us — failed merges now reliably emit an event, so we can alert, log, and retry instead of discovering bad merges weeks later. Caveat to state plainly: this is pre-1.0 software from a single maintainer, so we pin the version, wrap it behind our own interface, and keep an exit path.
To engineering: Treat 0.2.1 as the floor version — on 0.2.0 the failure event never fired, so error handling and any failure-driven listeners were silently dead. The fail() → failed() rename landed in a patch release, so grep for fail( in listeners, subclasses, and tests before upgrading. Recommended posture: depend on ^0.2.1, isolate the package behind a RecordMerger-style service of our own, subscribe to both success and failure events for audit and alerting, and add integration tests covering the failure path — precisely the path that was broken until now.
How can I help you explore Laravel packages today?