craftcms / craftcms/cms

[5.x]: Craft CMS 5 upgrade causes Neo field content loss on QA environment despite successful migrations

Open
#18,832 4 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug
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

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
  1. Start with a Craft CMS 4 project using Neo as a page builder field.
  2. Create entries containing populated Neo blocks with multiple nested subfields.
  3. Upgrade the project to Craft CMS 5 following the official upgrade documentation.
  4. Follow the Neo migration guidance from issue #943.
  5. Run all Craft and plugin migrations locally.
  6. Verify that Neo content still exists locally.
  7. Deploy the same upgraded codebase to another environment (in our case: QA).
  8. Run migrations successfully on that environment.
  9. 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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.