Recent changes
Wednesday November 04 2026
-
Add roles and policies Updated Markdown page
A migration that creates the role News editor with its policies, limits two of them to the class news_article, assigns it to the user group Editors found by remote id, and removes role, policies and assignment in down().
-
Captions and rollback in practice Updated Markdown page
Walk through the ways back after a migration run - the automatic restore after a failure, rolling back a whole run, one migration with its down(), an earlier caption for experts - with the commands, their output and…
-
Change content in bulk Updated Markdown page
A migration that walks every object of a class in batches, publishes a new version of each one that needs the change, commits per object, logs its progress and is safe to run again - the pattern for any change to many…
-
Coming from Doctrine Migrations Updated Markdown page
For developers who know Doctrine Migrations from Symfony projects - every Doctrine command and class mapped to its Exponential 6 counterpart, what Exponential adds (captions, commit, tag and push, environments…
-
Coming from the Kaliop migration bundle Updated Markdown page
For developers who used the Kaliop eZ Migration Bundle (ezmigrationbundle) on eZ Platform and Ibexa projects - its commands, files and table mapped to Exponential 6, and a YAML content, class and role step rewritten by…
-
Coming from SQL update files Updated Markdown page
For teams that ship database changes as hand-written SQL files and update scripts - how one change becomes one PHP migration that knows every engine, is recorded, captioned and committed, with a worked example of an…
-
Create or change a content class Updated Markdown page
A migration that creates the content class news_article with its attributes and class group, the same way on development, staging and production, and the pattern for changing a class (its name, its name pattern) in a…
-
Deploying with migrations: CI/CD and GitHub Actions Updated Markdown page
Run migrations as part of every deploy - the order of the steps, a complete GitHub Actions workflow that checks pull requests and deploys over SSH, the exit codes a pipeline acts on, the installation lock, and runs…
-
Migrations on MySQL, PostgreSQL, SQLite, Oracle and MongoDB Updated Markdown page
What each database engine means for a migration - transactions, the simulation, captions and the restore, schema changes that commit at once - and how to write one migration that works on MySQL/MariaDB, PostgreSQL…
-
Fix data Updated Markdown page
A migration that corrects wrong rows - names with stray spaces, addresses over http - with a pure function that the plan, the run and a test share, escaped SQL through the run's connection, and the old values in the run…
-
Large data migrations: batches, time limits and resume Updated Markdown page
Change thousands of objects or rows in one migration without running out of memory or locking the site - batches, transactional() returning false, an idempotent up(), pauses, maintenance mode, and resuming a run that…
-
Migrations in an extension or package Updated Markdown page
Ship migrations inside an extension (extension/<name>/migrations/) or an installed package, generate them with --source=extension:<name>, and make a site's migrations wait for them with requires.
-
Move or rename INI settings Updated Markdown page
A PHP migration that moves settings of an installation's override from site.ini to a file of their own and renames one on the way, keeps the value of each installation, writes the new file before it removes the old…
-
Per-environment migrations: development, staging and production Updated Markdown page
Limit a migration to some environments with the header line environments, set the environment of each installation, and follow one change from development through staging to production.
-
Commit, tag and push the record of a run Updated Markdown page
Set up the migrations repository so every run's status file and log are committed, tagged migrations/<environment>/<run-id> and pushed; choose between the site's own repository and a separate one, push what failed…
-
Reviewing a migration in code review Updated Markdown page
A checklist for reviewing a migration in a pull request - the file and header, the order, plan(), up() and down(), engines and transactions, ids that differ between installations, personal data, and what the reviewer…
-
Seed content for a new site Updated Markdown page
A migration that publishes the starting content of a site - a folder and its first articles - by remote id, only what is missing, in the language of the content root, so every new installation and every developer's copy…
-
Team workflow with git: branches, conflicts and order Updated Markdown page
How several developers write migrations on branches without stepping on each other - timestamps and order, requires for real dependencies, two migrations with the same timestamp, rebasing, renaming only before a merge…
-
Testing migrations: check, simulate, diff and CI Updated Markdown page
Four layers of tests for migrations - the lint without a database, the dry run, the simulation with a diff on PostgreSQL or SQLite, and a PHPUnit test on a throwaway SQLite database - and how to run them in CI.
-
The audit trail of migration runs Updated Markdown page
Where a migration run leaves its traces - the tables exp_migration and exp_migration_run, the status file and the run log in git, var/log/migration.log and the audit events system.migration.* - and how to answer "what…