Skip to content

Laravel 12 automaticallyEagerLoadRelationships() is incompatible with Lighthouse BatchLoaders #2679

Open
@Squishy123

Description

@Squishy123

Describe the bug

  • When enabling automatic eager load relationships, with batchload_relations => true in lighthouse.php, the lighthouse-related API's with pagination return an error
  • I think the functions are semi-redundant because the new laravel automatic eager loading should take care of the default batch loading? Not 100% sure

Steps to reproduce

  1. Use > Laravel 12.8
  2. Add Model::automaticallyEagerLoadRelationships() to the AppServiceProvider.php boot method
  3. Try to intiate graphql query with a hasMany relation

Output/Logs

Click to expand
[2025-05-05 16:53:44] local.ERROR: Method Illuminate\Database\Eloquent\Collection::relationLoaded does not exist. {"userId":188,"exception":"[object] (BadMethodCallException(code: 0): Method Illuminate\\Database\\Eloquent\\Collection::relationLoaded does not exist. at /var/www/html/vendor/laravel/framework/src/Illuminate/Macroable/Traits/Macroable.php:115)
[stacktrace]
#0 /var/www/html/vendor/laravel/framework/src/Illuminate/Support/Traits/ForwardsCalls.php(23): Illuminate\\Support\\Collection->__call()
#1 /var/www/html/vendor/laravel/framework/src/Illuminate/Pagination/AbstractPaginator.php(799): Illuminate\\Pagination\\AbstractPaginator->forwardCallTo()
#2 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Collection.php(263): Illuminate\\Pagination\\AbstractPaginator->__call()
#3 [internal function]: Illuminate\\Database\\Eloquent\\Collection->Illuminate\\Database\\Eloquent\\{closure}()
#4 /var/www/html/vendor/laravel/framework/src/Illuminate/Collections/Arr.php(1044): array_filter()
#5 /var/www/html/vendor/laravel/framework/src/Illuminate/Collections/Collection.php(400): Illuminate\\Support\\Arr::where()
#6 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Collection.php(261): Illuminate\\Support\\Collection->filter()
#7 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Collection.php(277): Illuminate\\Database\\Eloquent\\Collection->loadMissingRelationshipChain()
#8 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Collection.php(760): Illuminate\\Database\\Eloquent\\Collection->loadMissingRelationshipChain()
#9 [internal function]: Illuminate\\Database\\Eloquent\\Collection->Illuminate\\Database\\Eloquent\\{closure}()
#10 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasRelationships.php(171): call_user_func()
#11 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasRelationships.php(195): Illuminate\\Database\\Eloquent\\Model->invokeRelationAutoloadCallbackFor()
#12 [internal function]: Illuminate\\Database\\Eloquent\\Model->Illuminate\\Database\\Eloquent\\Concerns\\{closure}()
#13 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasRelationships.php(171): call_user_func()
#14 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasRelationships.php(195): Illuminate\\Database\\Eloquent\\Model->invokeRelationAutoloadCallbackFor()
#15 [internal function]: Illuminate\\Database\\Eloquent\\Model->Illuminate\\Database\\Eloquent\\Concerns\\{closure}()
#16 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasRelationships.php(171): call_user_func()
#17 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasRelationships.php(195): Illuminate\\Database\\Eloquent\\Model->invokeRelationAutoloadCallbackFor()
#18 [internal function]: Illuminate\\Database\\Eloquent\\Model->Illuminate\\Database\\Eloquent\\Concerns\\{closure}()
#19 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasRelationships.php(171): call_user_func()
#20 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasRelationships.php(155): Illuminate\\Database\\Eloquent\\Model->invokeRelationAutoloadCallbackFor()
#21 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php(554): Illuminate\\Database\\Eloquent\\Model->attemptToAutoloadRelation()
#22 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php(486): Illuminate\\Database\\Eloquent\\Model->getRelationValue()
#23 /var/www/html/app/Traits/Models/CamelCased.php(71): Illuminate\\Database\\Eloquent\\Model->getAttribute()
#24 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(2337): App\\Models\\Processing\\ProductVariant->getAttribute()
#25 /var/www/html/app/Models/Processing/ProductVariant.php(421): Illuminate\\Database\\Eloquent\\Model->__get()
#26 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php(705): App\\Models\\Processing\\ProductVariant->getTitleAttribute()
#27 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php(2269): Illuminate\\Database\\Eloquent\\Model->mutateAttribute()
#28 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php(521): Illuminate\\Database\\Eloquent\\Model->transformModelValue()
#29 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php(475): Illuminate\\Database\\Eloquent\\Model->getAttributeValue()
#30 /var/www/html/app/Traits/Models/CamelCased.php(73): Illuminate\\Database\\Eloquent\\Model->getAttribute()
#31 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(2364): App\\Models\\Processing\\ProductVariant->getAttribute()
#32 /var/www/html/vendor/webonyx/graphql-php/src/Utils/Utils.php(269): Illuminate\\Database\\Eloquent\\Model->offsetExists()
#33 /var/www/html/vendor/webonyx/graphql-php/src/Executor/Executor.php(201): GraphQL\\Utils\\Utils::extractKey()
#34 /var/www/html/vendor/nuwave/lighthouse/src/Schema/Values/FieldValue.php(188): GraphQL\\Executor\\Executor::defaultFieldResolver()
#35 /var/www/html/vendor/webonyx/graphql-php/src/Executor/ReferenceExecutor.php(754): Nuwave\\Lighthouse\\Schema\\Values\\FieldValue->Nuwave\\Lighthouse\\Schema\\Values\\{closure}()
#36 /var/www/html/vendor/webonyx/graphql-php/src/Executor/ReferenceExecutor.php(662): GraphQL\\Executor\\ReferenceExecutor->resolveFieldValueOrError()
#37 /var/www/html/vendor/webonyx/graphql-php/src/Executor/ReferenceExecutor.php(1375): GraphQL\\Executor\\ReferenceExecutor->resolveField()
#38 /var/www/html/vendor/webonyx/graphql-php/src/Executor/ReferenceExecutor.php(1314): GraphQL\\Executor\\ReferenceExecutor->executeFields()
#39 /var/www/html/vendor/webonyx/graphql-php/src/Executor/ReferenceExecutor.php(1265): GraphQL\\Executor\\ReferenceExecutor->collectAndExecuteSubfields()
#40 /var/www/html/vendor/webonyx/graphql-php/src/Executor/ReferenceExecutor.php(939): GraphQL\\Executor\\ReferenceExecutor->completeObjectValue()
#41 /var/www/html/vendor/webonyx/graphql-php/src/Executor/ReferenceExecutor.php(792): GraphQL\\Executor\\ReferenceExecutor->completeValue()
#42 /var/www/html/vendor/webonyx/graphql-php/src/Executor/Promise/Adapter/SyncPromise.php(152): GraphQL\\Executor\\ReferenceExecutor->GraphQL\\Executor\\{closure}()
#43 /var/www/html/vendor/webonyx/graphql-php/src/Executor/Promise/Adapter/SyncPromise.php(50): GraphQL\\Executor\\Promise\\Adapter\\SyncPromise->GraphQL\\Executor\\Promise\\Adapter\\{closure}()
#44 /var/www/html/vendor/webonyx/graphql-php/src/Executor/Promise/Adapter/SyncPromiseAdapter.php(147): GraphQL\\Executor\\Promise\\Adapter\\SyncPromise::runQueue()
#45 /var/www/html/vendor/webonyx/graphql-php/src/GraphQL.php(109): GraphQL\\Executor\\Promise\\Adapter\\SyncPromiseAdapter->wait()
#46 /var/www/html/vendor/nuwave/lighthouse/src/GraphQL.php(150): GraphQL\\GraphQL::executeQuery()
#47 /var/www/html/vendor/nuwave/lighthouse/src/GraphQL.php(112): Nuwave\\Lighthouse\\GraphQL->executeParsedQueryRaw()
#48 /var/www/html/vendor/nuwave/lighthouse/src/GraphQL.php(92): Nuwave\\Lighthouse\\GraphQL->executeParsedQuery()
#49 /var/www/html/vendor/nuwave/lighthouse/src/GraphQL.php(251): Nuwave\\Lighthouse\\GraphQL->executeQueryString()
#50 /var/www/html/vendor/nuwave/lighthouse/src/GraphQL.php(214): Nuwave\\Lighthouse\\GraphQL->executeOperation()
#51 /var/www/html/vendor/nuwave/lighthouse/src/Support/Utils.php(107): Nuwave\\Lighthouse\\GraphQL->Nuwave\\Lighthouse\\{closure}()
#52 /var/www/html/vendor/nuwave/lighthouse/src/GraphQL.php(212): Nuwave\\Lighthouse\\Support\\Utils::mapEach()
#53 /var/www/html/vendor/nuwave/lighthouse/src/Http/GraphQLController.php(32): Nuwave\\Lighthouse\\GraphQL->executeOperationOrOperations()
#54 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(46): Nuwave\\Lighthouse\\Http\\GraphQLController->__invoke()
#55 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Route.php(265): Illuminate\\Routing\\ControllerDispatcher->dispatch()
#56 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Route.php(211): Illuminate\\Routing\\Route->runController()
#57 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(808): Illuminate\\Routing\\Route->run()
#58 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(169): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}()
#59 /var/www/html/vendor/nuwave/lighthouse/src/Http/Middleware/AttemptAuthentication.php(22): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#60 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(208): Nuwave\\Lighthouse\\Http\\Middleware\\AttemptAuthentication->handle()
#61 /var/www/html/vendor/nuwave/lighthouse/src/Http/Middleware/AcceptJson.php(24): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#62 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(208): Nuwave\\Lighthouse\\Http\\Middleware\\AcceptJson->handle()
#63 /var/www/html/vendor/laravel/sanctum/src/Http/Middleware/EnsureFrontendRequestsAreStateful.php(26): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#64 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(169): Laravel\\Sanctum\\Http\\Middleware\\EnsureFrontendRequestsAreStateful->Laravel\\Sanctum\\Http\\Middleware\\{closure}()
#65 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(87): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#66 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(208): Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken->handle()
#67 /var/www/html/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(120): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#68 /var/www/html/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(63): Illuminate\\Session\\Middleware\\StartSession->handleStatefulRequest()
#69 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(208): Illuminate\\Session\\Middleware\\StartSession->handle()
#70 /var/www/html/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(36): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#71 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(208): Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse->handle()
#72 /var/www/html/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(74): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#73 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(208): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle()
#74 /var/www/html/vendor/laravel/sanctum/src/Http/Middleware/EnsureFrontendRequestsAreStateful.php(61): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#75 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(190): Laravel\\Sanctum\\Http\\Middleware\\EnsureFrontendRequestsAreStateful->Laravel\\Sanctum\\Http\\Middleware\\{closure}()
#76 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(126): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#77 /var/www/html/vendor/laravel/sanctum/src/Http/Middleware/EnsureFrontendRequestsAreStateful.php(25): Illuminate\\Pipeline\\Pipeline->then()
#78 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(208): Laravel\\Sanctum\\Http\\Middleware\\EnsureFrontendRequestsAreStateful->handle()
#79 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(126): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#80 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(807): Illuminate\\Pipeline\\Pipeline->then()
#81 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(786): Illuminate\\Routing\\Router->runRouteWithinStack()
#82 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(750): Illuminate\\Routing\\Router->runRoute()
#83 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(739): Illuminate\\Routing\\Router->dispatchToRoute()
#84 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch()
#85 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(169): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}()
#86 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#87 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
#88 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(208): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle()
#89 /var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#90 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(208): Illuminate\\Http\\Middleware\\ValidatePostSize->handle()
#91 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(109): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#92 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(208): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle()
#93 /var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(61): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#94 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(208): Illuminate\\Http\\Middleware\\HandleCors->handle()
#95 /var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(58): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#96 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(208): Illuminate\\Http\\Middleware\\TrustProxies->handle()
#97 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(126): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#98 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then()
#99 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter()
#100 /var/www/html/public/index.php(51): Illuminate\\Foundation\\Http\\Kernel->handle()
#101 {main}
"}

Lighthouse Version

6.54.0

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions