Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Data Migration Laravel Package

fndmiranda/data-migration

A Laravel package for managing data migrations separately from schema migrations. It provides versioned data migration classes and Artisan commands to transform, move, backfill, and roll back application data safely during deployments and refactors.

View on GitHub
Deep Wiki
Context7

Product Decisions This Supports

  • Build vs. buy for reference-data management. Every product eventually needs a controlled way to ship and update "known good" data — countries, currencies, tax rates, plan tiers, permission matrices, status enums, feature flags, lookup tables — consistently across local, staging, and production. This package is a candidate to replace the homegrown artisan command or one-off seeder that someone wrote three years ago and nobody trusts.
  • Feature scoping: idempotent data sync vs. one-shot seeding. Laravel's native seeders are run-once-or-forever and are not safe to re-run in production. If the roadmap includes "we need to update these 400 reference rows without wiping customer-modified fields," that's a concrete feature this package targets.
  • Roadmap item: environment and tenant parity. If you're standing up new environments, onboarding tenants, or expanding to new regions, the ability to declaratively synchronize a canonical dataset into each database turns a recurring ops chore into a repeatable pipeline step.
  • Migration sequencing decisions. Data migrations that must run between schema changes (backfill a new column before making it non-null, populate a join table before cutting over) are a recurring source of deploy incidents. A dedicated data-migration layer with its own run-tracking table is the difference between a deterministic deploy and a manual runbook.
  • Third-party / source-of-truth ingestion. Where an external system (a pricing spreadsheet, an internal API, a vendor catalogue) owns the data, this package is a lightweight landing zone — cheaper than standing up an ETL tool or a queue-based sync service for low-volume, low-velocity datasets.
  • Risk and ownership decisions. At 35 stars and MIT license, this is a low-commitment, high-review dependency. Adopting it means accepting a maintenance obligation (fork-and-own) or bounding its blast radius to non-critical reference data. That's a decision worth making explicitly rather than by accident.

When to Consider This Package

Adopt when all of the following hold:

  • The data in question is reference or configuration data, not user-generated or transactional. Low write velocity, small row counts (thousands, not millions), and no complex relationships.
  • You need repeatable, idempotent application — the same command must be safe on a fresh database, an existing production database, and a re-run after a partial failure.
  • You want the sync to live inside the Laravel deploy lifecycle (artisan command, version-controlled definitions, run history in the database) rather than as an external job.
  • You're comfortable reading and vendoring the source. Before adoption, do a code review: how does it identify records (primary key, unique slug, composite key)? What happens on conflict? Does "synchronize" ever delete rows, and is that opt-in? Is there a dry-run? Are there transactions around partial failures?
  • You can pin the version and accept that upstream activity may be intermittent; plan for a fork if the package becomes load-bearing.

Look elsewhere when:

  • Scale or complexity is high. Bulk upserts of millions of rows, cross-database sync, change-data-capture, or anything with ordering/dependency graphs between entities. Use a proper ETL/queue pipeline, or Laravel's upsert() with a hand-rolled, well-tested command.
  • You need auditability or approval workflows around data changes (regulated environments, financial reference data, healthcare code sets). A 35-star package with a single maintainer is not where you want your compliance evidence to live.
  • Schema and data migrations must be transactionally coupled in ways the package doesn't model — check whether it interleaves with schema migrations or runs independently.
  • The team is small and dependency-averse. Every package is a liability; if your data-sync needs are three tables and two commands, ~150 lines of your own code with tests is cheaper than onboarding a dependency you must audit anyway.
  • You need active community support — expect no Stack Overflow corpus, no ecosystem of answers, and slow or absent upstream fixes. Budget for self-sufficiency.

How to Pitch It (Stakeholders)

For executives: We have a recurring, low-glamour operational problem — keeping reference and configuration data identical across development, staging, and production, and across regions and tenants. Today that's handled by ad-hoc scripts and manual steps, which is where our deploy incidents and "works in staging" bugs come from. This is a small, MIT-licensed Laravel package that formalizes that job: version-controlled data definitions, a tracked run history, and a repeatable command that's safe to run repeatedly. It is not a platform bet — it's a targeted utility, cheap to adopt and cheap to abandon, and we'd confine it to non-customer-critical reference data. Recommendation: run a timeboxed spike (one engineer, roughly a week) on one real dataset, and decide on evidence rather than enthusiasm. The alternative — continuing to maintain bespoke scripts — has its own, less visible, cost.

For engineering: This package adds a data-migration layer alongside schema migrations — declarative datasets applied idempotently, with execution state persisted so re-runs and partial failures are handled. It solves a genuine gap: seeders aren't safe for production re-runs, and hand-rolled upsert commands accumulate undetected divergence. Caveats are real and must be stated plainly: 35 stars, effectively a single maintainer, no meaningful community footprint, and unknown edge-case behavior. So the adoption terms are: (1) review the source before merging — specifically conflict resolution and any delete behavior in sync mode, (2) wrap it behind our own thin command so it's swappable, (3) pin the version and treat a fork as a live option, (4) restrict initial scope to reference data with no customer-write overlap, (5) require dry-run output in the deploy checklist. If the spike shows the record-matching semantics don't fit our key structure, we walk away — the exit cost is one week, not one quarter.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
oxygen/data
oxygen/core
jengo/base
xiloryx/log-collector
a21ns1g4ts/filament-stripe
la-php/laravel-admin
artisan-build/community-prompts
vleroy/smart
ayles-software/laravel-australian-public-holidays
cboxdk/laravel-id-spatie
cboxdk/laravel-id-billing
cboxdk/laravel-id-billing-bridge
simple-as-fuck/php-performance-log
hsluv/hsluv
seampact/codegen
seampact/hooks
seampact/ir
mehedimi/laravel-amp-mail
happones/laravel-vue-i18n-generator
jwerd/inertia-table