Upgrades and migration

Laravel migration and upgrade services without a big-bang rewrite

We upgrade Laravel applications across major releases and move legacy PHP and CodeIgniter systems onto Laravel piece by piece, with test coverage first and your data verified at every step.

  • Tests before any upgrade
  • Old and new run together
  • Data verified at each step
What is included
  • Upgrade assessment
  • Version upgrades
  • Legacy PHP to Laravel
  • CodeIgniter to Laravel
  • Database and data migration
  • Test coverage first
Get a free quote Reply within one business day. NDA on request.
The problem

Why upgrades get postponed

Two kinds of project land here. In the first, a Laravel application is several major releases behind. It still works, but security fixes no longer reach it, new packages refuse to install and the PHP release it needs is being retired by the host. In the second, the system is not Laravel at all: plain PHP grown over a decade, or a CodeIgniter application, that the business depends on and nobody enjoys changing.

Both have the same wrong answer, which is to stop everything and rewrite. Rewrites take longer than planned, freeze feature work and tend to rediscover every forgotten business rule in production. We move in small steps instead: tests around current behavior, one release or one module at a time, and the live application in use throughout. If you are still deciding whether to leave CodeIgniter, our CodeIgniter migration page looks at the question from that side.

  • Several major releases behind

    Each skipped upgrade made the next one harder. Now the gap looks too large to cross, and the application sits on a framework and PHP release without security support.

  • No tests to say what broke

    After any upgrade attempt, the only way to check is clicking through screens by hand. Something always slips through, so the upgrade was rolled back last time.

  • Packages that never caught up

    A handful of Composer packages have no release for the newer framework. They block the whole upgrade until each is replaced, forked or removed.

  • Legacy PHP nobody fully understands

    Business rules are spread across include files, stored procedures and cron scripts. A rewrite feels necessary and terrifying in equal measure.

What we do

Migration and upgrade work we handle

We treat upgrades and migrations as engineering projects with rehearsals and checkpoints, never as a weekend of search and replace.

Upgrade assessment

A report on your current framework and PHP releases, every dependency's upgrade path, deprecated features in use and the amount of test coverage needed before starting.

Version upgrades

One major release at a time, using Laravel Shift to automate mechanical changes, then manual fixes, a green test suite and a deploy before the next step.

Legacy PHP to Laravel

Old applications wrapped and replaced route by route using the strangler pattern, sharing sessions and database with the legacy code until the last page is retired.

CodeIgniter to Laravel

Controllers, models and libraries mapped to Laravel equivalents, query builder calls moved to Eloquent, and authentication carried over so users keep their passwords.

Database and data migration

Existing schemas brought under Laravel migrations, data cleaned and reshaped with repeatable scripts, and row counts and checksums compared between old and new.

Test coverage first

Characterization and browser tests written against the current system, so that every later step is checked by a suite instead of by hope.

Typical projects

Moves we carry out

01

Catching up an old Laravel application

An application several major releases behind brought to a current, supported release through a sequence of small upgrades, each deployed to production before the next begins.

02

Legacy PHP application to Laravel

A procedural PHP system moved onto Laravel module by module, starting with the areas that change most, while untouched screens continue to run from the old code.

03

CodeIgniter application to Laravel

A CodeIgniter codebase rebuilt on Laravel with the same database, proper migrations, queues for slow work and a test suite it never had.

04

PHP and server upgrade

The application made compatible with a current PHP release and moved to new hosting, with deprecated functions replaced and performance compared before and after.

In depth

How we move an application without stopping it

Tests come before the first change

An upgrade without tests is a guess. We begin by writing characterization tests around the flows the business cannot afford to lose: sign-in, checkout or order entry, invoicing, the main reports, scheduled jobs. Where the code is too tangled for feature tests, browser tests drive the real screens. We are not aiming for full coverage. We want enough that a framework change which alters behavior turns something red.

Upgrading Laravel one release at a time

Jumping several major releases in one go mixes hundreds of breaking changes together, and when something fails you cannot tell which one caused it. We go release by release. Laravel Shift, an automated upgrade service, handles the mechanical edits such as renamed methods, changed config files and updated skeleton code, and opens a pull request we review line by line. Then come the parts no tool can do: replacing abandoned packages, updating code that relied on removed behavior and raising the PHP release when the framework requires it. Each step ends with a green suite and a production deploy. An upgrade spread over weeks in safe slices beats one large release that nobody dares ship.

The strangler approach for legacy PHP and CodeIgniter

For a non-Laravel application we install Laravel in front of the old code. Requests reach Laravel first. Routes that have been rebuilt are served by the new code, and everything else falls through to the legacy application untouched. Both sides read the same database and share the login session, so users move between old and new pages without noticing. Module by module the old code shrinks until it can be deleted. You keep shipping features during the migration, in the new code. For CodeIgniter projects that should stay on CodeIgniter for now, legacy PHP modernization describes the lighter options.

The database is migrated, not recreated

Your data is the asset, so the schema stays in place at first. We generate a baseline migration from the existing database, then make every later change through Laravel migrations. Eloquent models are mapped onto the tables as they are, odd column names included. Structural cleanup, such as adding foreign keys, splitting overloaded tables or fixing character sets, happens later in small migrations with backfill jobs. Old password hashes are accepted at login and rehashed, so nobody is forced to reset.

Rehearsal and rollback

Every production step is rehearsed on staging with a recent copy of live data. We compare row counts and key totals before and after, time the migration so we know how long any maintenance window must be, and write down the rollback procedure. Most steps need no downtime at all. The ones that do are scheduled with you for a quiet hour.

Process

The upgrade path step by step

  1. 1

    Assessment

    We review code, dependencies, server setup and data, and give you a written upgrade path with risks, steps and a quote.

  2. 2

    Safety net

    Tests are written around the critical flows, CI is set up and a staging environment is built from a copy of production.

  3. 3

    Incremental steps

    One framework release or one legacy module per step, each reviewed, tested and deployed before the next starts.

  4. 4

    Data verification

    After every step that touches data we compare counts and totals with the previous state and keep backups until you sign off.

  5. 5

    Cleanup and handover

    Dead code, shims and the old application are removed, documentation is updated and a routine for future upgrades is agreed.

Deliverables

Where you stand afterwards

  • A supported framework and PHP release
  • A test suite the application never had
  • A schema managed by versioned migrations
  • User accounts and passwords carried over intact
  • An upgrade routine for the releases to come
FAQ

Upgrade and migration questions

Can you upgrade across several major Laravel releases at once?
We can reach the latest release from one that is years old, but we do it one major release at a time. Stepping through each release keeps breaking changes separated, so failures are easy to trace. The application stays deployable between steps.
What is Laravel Shift and do you rely on it?
Laravel Shift is an automated service that applies the routine code changes for a framework upgrade and opens a pull request. We use it as an aid because it saves hours of mechanical editing. Package replacements, behavior changes and testing still need developers.
Should we upgrade or rebuild from scratch?
Upgrade in almost every case where the application is already on Laravel. Rebuilding makes sense only when the data model itself is wrong for the business today. For non-Laravel systems we prefer a gradual strangler migration over a full rewrite, because it keeps delivering value along the way.
Will there be downtime?
Most steps are deployed without any. Some database changes on large tables need a short maintenance window, which we measure in rehearsal and schedule with you. The strangler approach for legacy systems is designed so old and new code serve traffic together.
Our application has no tests. Is that a blocker?
No, it is the normal starting point. Writing tests around the critical flows is the first phase of the project and is included in the estimate. Those tests remain yours afterwards and make every later change safer.
Can you migrate plain PHP that uses no framework?
Yes. We place Laravel in front of the existing code, move functionality across route by route and keep one database throughout. If Laravel is more than the application needs, our PHP migration and upgrade service covers bringing it up to a current PHP release as it is.
How do we avoid falling behind again?
By treating upgrades as routine. With tests and CI in place, each new framework release becomes a small, planned task. Our Laravel maintenance plans include dependency updates every month and framework upgrades on a schedule.
Start a project

Stuck on an old release or a legacy codebase?

Tell us what the application runs on today. We will reply within one business day and can begin with a written upgrade assessment.

  • Free consultation and quote
  • NDA on request
  • You own the source code
  • Reply within one business day
Add budget and timeline optional, helps us quote faster

This form is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.