[5.x]: Craft CMS 5 upgrade causes Neo field content loss on QA environment despite successful migrations
Nobody has claimed this yet.
- Dominant language
- PHP
- Stars
- 3.6k
- Forks
- 705
- Avg merge
- 1d 5h
- Merged PRs (30d)
- 134
Description
Description
After upgrading from Craft CMS 4 to Craft CMS 5, content stored in Neo fields is missing on one environment, despite the upgrade succeeding without errors on other environments.
The issue only occurs on our QA server.
##Steps Taken
We followed the official Craft CMS upgrade guide: https://craftcms.com/docs/5.x/upgrade.html?utm_source=chatgpt.com
We also followed the Neo migration guidance here: https://github.com/spicywebau/craft-neo/issues/943?utm_source=chatgpt.com
##What Happened
- Upgraded locally from Craft CMS 4 → Craft CMS 5.
- Tested locally thoroughly — everything worked correctly.
- Deployed to our development server.
- Ran migrations successfully with no errors.
- Verified that content was still intact on development.
- Deployed the same code/database migration process to QA.
- Migrations completed successfully on QA as well.
- However, a large amount of content is now missing on QA.
- Specific Content Affected
The missing content is inside a Neo field used as a page builder.
The structure is roughly:
- Entry
- Neo field (page builder)
- Multiple Neo block types
- Multiple nested subfields/content fields
- Multiple Neo block types
- Neo field (page builder)
After the upgrade on QA:
- The Neo field itself still exists
- The block structure appears to exist
- But the content inside the Neo blocks/subfields is empty/missing
##Additional Notes
- Local environment works correctly
- Development server works correctly
- QA server loses content
- The same upgrade process was used across environments
- Migrations complete without visible errors
- No obvious database migration failures appear in logs
At this point we are unsure whether:
- some Neo content migration is partially failing silently
- If there is environment-specific behavior.
- Or if some content/state is not being properly transformed during the upgrade.
Steps to reproduce
- Start with a Craft CMS 4 project using Neo as a page builder field.
- Create entries containing populated Neo blocks with multiple nested subfields.
- Upgrade the project to Craft CMS 5 following the official upgrade documentation.
- Follow the Neo migration guidance from issue #943.
- Run all Craft and plugin migrations locally.
- Verify that Neo content still exists locally.
- Deploy the same upgraded codebase to another environment (in our case: QA).
- Run migrations successfully on that environment.
- Open entries containing the Neo field.
Expected behavior
All Neo block content and nested subfield content should remain intact after the upgrade.
Actual behavior
The Neo field and block structure still exist, but the content inside the Neo blocks/subfields is empty or missing.
Has anyone encountered this behavior before, or is there additional logging/debugging we can enable to identify why Neo content is being lost during the Craft 5 upgrade?
Craft CMS version
5.9.22
PHP version
8.3.3
Operating system and version
Rocky Linux 9.7
Database type and version
MariaDB 10.11.16
Image driver and version
No response
Installed plugins and versions
- spicyweb/craft-neo: 5.5.8
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the Craft CMS 5 upgrade guide and the Neo migration guidance in issue #943, then compare the QA migration results and available logs with the working local and development environments. Done means identifying why Neo nested-field content disappears only on QA and confirming that the affected content remains intact after the upgrade.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- mariadb, php
- Domain
- backend, databases
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100