statamic / cms

The core Laravel CMS Composer package
https://statamic.com
Other
3.79k stars 517 forks source link

Multisite installation site migration resulting in "Call to a member function field() on null" error #8694

Closed RyanDrewniak closed 1 year ago

RyanDrewniak commented 1 year ago

Bug description

I've moved a site to a new folder structure (just updated the folder name for the webroot directory where my Statamic site is set up), and now I'm getting the following error when trying to view the front-end of the site(s), and when trying to edit the entries in the collections:

Call to a member function field() on null

I'm able to access the control panel, I can edit the blueprints, but the collections appear to be inexplicably borked.

Here's where the stacktrace error seems to be coming from:

Call to a member function field() on null {"userId":"18fe6c9b-c5a9-4f9c-a238-0b79ca5de81f","exception":"[object] (Error(code: 0): Call to a member function field() on null at /var/www/ssc-multisite/vendor/statamic/cms/src/Entries/Entry.php:519)

I tried clearing running:

Does anyone know where I'm going wrong?

How to reproduce

Logs

dev.ERROR: Call to a member function field() on null {"userId":"18fe6c9b-c5a9-4f9c-a238-0b79ca5de81f","exception":"[object] (Error(code: 0): Call to a member function field() on null at /var/www/ssc-multisite/vendor/statamic/cms/src/Entries/Entry.php:519)
[stacktrace]
#0 /var/www/ssc-multisite/vendor/statamic/cms/src/Entries/Entry.php(472): Statamic\\Entries\\Entry->hasTime()
#1 /var/www/ssc-multisite/vendor/statamic/cms/src/Support/FluentGetterSetter.php(115): Statamic\\Entries\\Entry->Statamic\\Entries\\{closure}()
#2 /var/www/ssc-multisite/vendor/statamic/cms/src/Support/FluentGetterSetter.php(93): Statamic\\Support\\FluentGetterSetter->runGetterLogic()
#3 /var/www/ssc-multisite/vendor/statamic/cms/src/Entries/Entry.php(505): Statamic\\Support\\FluentGetterSetter->args()
#4 /var/www/ssc-multisite/vendor/statamic/cms/src/Entries/Entry.php(781): Statamic\\Entries\\Entry->date()
#5 /var/www/ssc-multisite/vendor/statamic/cms/src/Routing/UrlBuilder.php(80): Statamic\\Entries\\Entry->routeData()
#6 /var/www/ssc-multisite/vendor/statamic/cms/src/Routing/UrlBuilder.php(52): Statamic\\Routing\\UrlBuilder->routeData()
#7 /var/www/ssc-multisite/vendor/statamic/cms/src/Routing/Routable.php(43): Statamic\\Routing\\UrlBuilder->build()
#8 /var/www/ssc-multisite/vendor/statamic/cms/src/Entries/Entry.php(801): Statamic\\Entries\\Entry->routableUri()
#9 /var/www/ssc-multisite/vendor/statamic/cms/src/Entries/Entry.php(923): Statamic\\Entries\\Entry->uri()
#10 /var/www/ssc-multisite/vendor/statamic/cms/src/Query/ResolveValue.php(52): Statamic\\Entries\\Entry->getQueryableValue()
#11 /var/www/ssc-multisite/vendor/statamic/cms/src/Query/ResolveValue.php(34): Statamic\\Query\\ResolveValue->getItemPartValue()
#12 /var/www/ssc-multisite/vendor/statamic/cms/src/Query/ResolveValue.php(22): Statamic\\Query\\ResolveValue->resolveItemPartValue()
#13 /var/www/ssc-multisite/vendor/statamic/cms/src/Stache/Indexes/Value.php(18): Statamic\\Query\\ResolveValue->__invoke()
#14 /var/www/ssc-multisite/vendor/statamic/cms/src/Stache/Indexes/Value.php(12): Statamic\\Stache\\Indexes\\Value->getItemValue()
#15 [internal function]: Statamic\\Stache\\Indexes\\Value->Statamic\\Stache\\Indexes\\{closure}()
#16 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Collections/Arr.php(558): array_map()
#17 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Collections/Collection.php(777): Illuminate\\Support\\Arr::map()
#18 /var/www/ssc-multisite/vendor/statamic/cms/src/Stache/Indexes/Value.php(13): Illuminate\\Support\\Collection->map()
#19 /var/www/ssc-multisite/vendor/statamic/cms/src/Stache/Indexes/Index.php(95): Statamic\\Stache\\Indexes\\Value->getItems()
#20 /var/www/ssc-multisite/vendor/statamic/cms/src/Stache/Indexes/Index.php(79): Statamic\\Stache\\Indexes\\Index->update()
#21 /var/www/ssc-multisite/vendor/statamic/cms/src/Stache/Stores/Store.php(46): Statamic\\Stache\\Indexes\\Index->load()
#22 /var/www/ssc-multisite/vendor/statamic/cms/src/Stache/Query/Builder.php(100): Statamic\\Stache\\Stores\\Store->index()
#23 /var/www/ssc-multisite/vendor/statamic/cms/src/Stache/Query/EntryQueryBuilder.php(85): Statamic\\Stache\\Query\\Builder->getWhereColumnKeysFromStore()
#24 [internal function]: Statamic\\Stache\\Query\\EntryQueryBuilder->Statamic\\Stache\\Query\\{closure}()
#25 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Collections/Arr.php(558): array_map()
#26 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Collections/Collection.php(777): Illuminate\\Support\\Arr::map()
#27 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Collections/Traits/EnumeratesValues.php(394): Illuminate\\Support\\Collection->map()
#28 /var/www/ssc-multisite/vendor/statamic/cms/src/Stache/Query/EntryQueryBuilder.php(86): Illuminate\\Support\\Collection->flatMap()
#29 /var/www/ssc-multisite/vendor/statamic/cms/src/Stache/Query/EntryQueryBuilder.php(76): Statamic\\Stache\\Query\\EntryQueryBuilder->getKeysFromCollectionsWithWhere()
#30 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Collections/Traits/EnumeratesValues.php(781): Statamic\\Stache\\Query\\EntryQueryBuilder->Statamic\\Stache\\Query\\{closure}()
#31 /var/www/ssc-multisite/vendor/statamic/cms/src/Stache/Query/EntryQueryBuilder.php(79): Illuminate\\Support\\Collection->reduce()
#32 /var/www/ssc-multisite/vendor/statamic/cms/src/Stache/Query/EntryQueryBuilder.php(57): Statamic\\Stache\\Query\\EntryQueryBuilder->getKeysFromCollectionsWithWheres()
#33 /var/www/ssc-multisite/vendor/statamic/cms/src/Stache/Query/Builder.php(26): Statamic\\Stache\\Query\\EntryQueryBuilder->getFilteredKeys()
#34 /var/www/ssc-multisite/vendor/statamic/cms/src/Query/Builder.php(523): Statamic\\Stache\\Query\\Builder->get()
#35 /var/www/ssc-multisite/vendor/statamic/cms/src/Stache/Repositories/EntryRepository.php(57): Statamic\\Query\\Builder->first()
#36 /var/www/ssc-multisite/vendor/statamic/cms/src/Data/DataRepository.php(70): Statamic\\Stache\\Repositories\\EntryRepository->findByUri()
#37 /var/www/ssc-multisite/vendor/statamic/cms/src/Data/DataRepository.php(41): Statamic\\Data\\DataRepository->attemptAllRepositories()
#38 /var/www/ssc-multisite/vendor/statamic/cms/src/Data/DataRepository.php(60): Statamic\\Data\\DataRepository->findByUri()
#39 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php(353): Statamic\\Data\\DataRepository->findByRequestUrl()
#40 /var/www/ssc-multisite/vendor/statamic/cms/src/Http/Controllers/FrontendController.php(30): Illuminate\\Support\\Facades\\Facade::__callStatic()
#41 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): Statamic\\Http\\Controllers\\FrontendController->index()
#42 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(43): Illuminate\\Routing\\Controller->callAction()
#43 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Routing/Route.php(260): Illuminate\\Routing\\ControllerDispatcher->dispatch()
#44 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Routing/Route.php(205): Illuminate\\Routing\\Route->runController()
#45 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Routing/Router.php(799): Illuminate\\Routing\\Route->run()
#46 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(141): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}()
#47 /var/www/ssc-multisite/vendor/statamic/cms/src/StaticCaching/Middleware/Cache.php(60): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#48 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Statamic\\StaticCaching\\Middleware\\Cache->handle()
#49 /var/www/ssc-multisite/vendor/statamic/cms/src/Http/Middleware/AuthGuard.php(14): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#50 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Statamic\\Http\\Middleware\\AuthGuard->handle()
#51 /var/www/ssc-multisite/vendor/statamic/cms/src/Http/Middleware/AddViewPaths.php(19): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#52 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Statamic\\Http\\Middleware\\AddViewPaths->handle()
#53 /var/www/ssc-multisite/vendor/statamic/cms/src/Http/Middleware/Localize.php(37): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#54 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Statamic\\Http\\Middleware\\Localize->handle()
#55 /var/www/ssc-multisite/vendor/statamic/cms/src/Http/Middleware/HandleToken.php(13): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#56 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Statamic\\Http\\Middleware\\HandleToken->handle()
#57 /var/www/ssc-multisite/vendor/statamic/cms/src/Http/Middleware/StacheLock.php(29): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#58 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Statamic\\Http\\Middleware\\StacheLock->handle()
#59 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(50): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#60 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Routing\\Middleware\\SubstituteBindings->handle()
#61 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(78): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#62 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken->handle()
#63 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#64 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\View\\Middleware\\ShareErrorsFromSession->handle()
#65 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(121): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#66 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(64): Illuminate\\Session\\Middleware\\StartSession->handleStatefulRequest()
#67 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Session\\Middleware\\StartSession->handle()
#68 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#69 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse->handle()
#70 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(67): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#71 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle()
#72 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(116): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#73 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Routing/Router.php(800): Illuminate\\Pipeline\\Pipeline->then()
#74 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Routing/Router.php(777): Illuminate\\Routing\\Router->runRouteWithinStack()
#75 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Routing/Router.php(741): Illuminate\\Routing\\Router->runRoute()
#76 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Routing/Router.php(730): Illuminate\\Routing\\Router->dispatchToRoute()
#77 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch()
#78 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(141): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}()
#79 /var/www/ssc-multisite/vendor/statamic/cms/src/Http/Middleware/DisableFloc.php(17): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#80 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Statamic\\Http\\Middleware\\DisableFloc->handle()
#81 /var/www/ssc-multisite/vendor/statamic/cms/src/Http/Middleware/CheckMultisite.php(14): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#82 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Statamic\\Http\\Middleware\\CheckMultisite->handle()
#83 /var/www/ssc-multisite/vendor/statamic/cms/src/Http/Middleware/CheckComposerJsonScripts.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#84 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Statamic\\Http\\Middleware\\CheckComposerJsonScripts->handle()
#85 /var/www/ssc-multisite/vendor/statamic/cms/src/Http/Middleware/PoweredByHeader.php(18): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#86 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Statamic\\Http\\Middleware\\PoweredByHeader->handle()
#87 /var/www/ssc-multisite/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#88 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Barryvdh\\Debugbar\\Middleware\\InjectDebugbar->handle()
#89 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#90 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
#91 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull->handle()
#92 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#93 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
#94 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle()
#95 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#96 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle()
#97 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(89): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#98 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle()
#99 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(49): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#100 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Http\\Middleware\\HandleCors->handle()
#101 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(39): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#102 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Http\\Middleware\\TrustProxies->handle()
#103 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(116): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#104 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then()
#105 /var/www/ssc-multisite/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter()
#106 /var/www/ssc-multisite/public/index.php(52): Illuminate\\Foundation\\Http\\Kernel->handle()
#107 {main}

Environment

===
Environment
===
Laravel Version: 10.22.0
PHP Version: 8.1.23
Composer Version: 2.6.1
Environment: dev
Debug Mode: ENABLED
Maintenance Mode: OFF

===
Cache
===
Config: NOT CACHED
Events: NOT CACHED
Routes: CACHED
Views: CACHED

===
Drivers
===
Broadcasting: log
Cache: statamic
Database: mysql
Logs: stack / single
Mail: smtp
Queue: sync
Session: file

===
Statamic
===
Addons: 0
Antlers: runtime
Stache Watcher: Enabled
Static Caching: Disabled
Version: 4.21.0 PRO

Installation

Starter Kit using via CLI

Antlers Parser

runtime (new)

Additional details

This should just be a basic 5 site multisite installation, using the Landtamic starter kit

jackmcdade commented 1 year ago

Hey there, this error usually is because an entry is referencing a blueprint or an entry link that doesn't exist anymore. You can check out this other issue here where they were able to track it down: https://github.com/statamic/cms/issues/8374

RyanDrewniak commented 1 year ago

It was really strange to debug. The problem was related to a switch from the default "Posts" collection to a new "Blogs" collection. There were indeed old references to the old "posts" blueprint that was since changed to "blogs".

Strangely though, the issue did not appear when editing those posts which would have used that blueprint. They appeared on a completely unrelated collection editing flow and with the physical output of the non-broken collection on the front end.

I can confirm that this problem is indeed user/developer error and not a bug.

Thank you so much @jackmcdade for the flag and support, here! I really appreciate it!

jackmcdade commented 1 year ago

Happy to help! Can you explain that completely unrelated collection editing flow so we can fix the error there too (like we did where you expected to run into an issue)?

RyanDrewniak commented 1 year ago

Happy to help! Can you explain that completely unrelated collection editing flow so we can fix the error there too (like we did where you expected to run into an issue)?


As part of the starter kit that I had implemented, there was a "Posts" collection, with a blueprint specific to it. As part of the project, I was renaming "Posts" to "Blogs", but had missed the blueprint identification change on each of the posts (I changed the blueprint name to "blogs" but failed to update the individual content entry files).

The issue only became present when:

If there was a more verbose/explicit indication of the content ID up-front, that could perhaps have made it easier to track down the core issue.


My take-away for long term support is: when making changes to collection & blueprint names, ensure that the corresponding content entry files also reflect those name changes. In short, update all of the following:

Additionally, this process becomes substantially more intricate when dealing with multisites that have pre-existing content. Doing full code repo/folder search & replace checks will save lots of headaches.