mikebronner / laravel-model-caching

Eloquent model-caching made easy.
MIT License
2.25k stars 212 forks source link

Return value of GeneaLabs\LaravelModelCaching\CacheKey::getValuesFromWhere() must be of the type string, array returned #303

Closed mr-Sepi0l closed 4 years ago

mr-Sepi0l commented 4 years ago

Describe the bug I got a very weird errors when executing a simple query.

Eloquent Query This is the generated query, causes no problem when executed in sequel pro. I cannot exactly send the eloquent because the query is generated automatically. When I remove the pinned = 1, it works.

SO here is the line that add the pinned param to the query

protected function pinned($value)
    {
        return $this->builder->where('pinned', $this->stringOrCollectionToArray($value));
    }
select * from `activities_users` where `pinned` = '1' and (`user_id` = '5579' or `user_id` is null) order by `updated_at` desc limit 20 offset 0

Stack Trace

[2019-10-23 09:41:32] local.ERROR: Return value of GeneaLabs\LaravelModelCaching\CacheKey::getValuesFromWhere() must be of the type string, array returned {"exception":"[object] (Symfony\\Component\\Debug\\Exception\\FatalThrowableError(code: 0): Return value of GeneaLabs\\LaravelModelCaching\\CacheKey::getValuesFromWhere() must be of the type string, array returned at /var/www/dev-team/dsprauel/api-unleashed/vendor/genealabs/laravel-model-caching/src/CacheKey.php:167)
[stacktrace]
#0 /var/www/dev-team/dsprauel/api-unleashed/vendor/genealabs/laravel-model-caching/src/CacheKey.php(143): GeneaLabs\\LaravelModelCaching\\CacheKey->getValuesFromWhere(Array)
#1 /var/www/dev-team/dsprauel/api-unleashed/vendor/genealabs/laravel-model-caching/src/CacheKey.php(307): GeneaLabs\\LaravelModelCaching\\CacheKey->getValuesClause(Array)
#2 /var/www/dev-team/dsprauel/api-unleashed/vendor/genealabs/laravel-model-caching/src/CacheKey.php(194): GeneaLabs\\LaravelModelCaching\\CacheKey->getOtherClauses(Array)
#3 [internal function]: GeneaLabs\\LaravelModelCaching\\CacheKey->GeneaLabs\\LaravelModelCaching\\{closure}(NULL, Array)
#4 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Support/Collection.php(1512): array_reduce(Array, Object(Closure), NULL)
#5 /var/www/dev-team/dsprauel/api-unleashed/vendor/genealabs/laravel-model-caching/src/CacheKey.php(197): Illuminate\\Support\\Collection->reduce(Object(Closure))
#6 /var/www/dev-team/dsprauel/api-unleashed/vendor/genealabs/laravel-model-caching/src/CacheKey.php(38): GeneaLabs\\LaravelModelCaching\\CacheKey->getWhereClauses()
#7 /var/www/dev-team/dsprauel/api-unleashed/vendor/genealabs/laravel-model-caching/src/Traits/Caching.php(92): GeneaLabs\\LaravelModelCaching\\CacheKey->make(Array, NULL, '')
#8 /var/www/dev-team/dsprauel/api-unleashed/vendor/genealabs/laravel-model-caching/src/Traits/Buildable.php(94): GeneaLabs\\LaravelModelCaching\\CachedBuilder->makeCacheKey(Array)
#9 /var/www/dev-team/dsprauel/api-unleashed/app/Models/DataAccess/Read/BaseReader.php(70): GeneaLabs\\LaravelModelCaching\\CachedBuilder->get()
#10 /var/www/dev-team/dsprauel/api-unleashed/app/Models/Business/BaseBusiness.php(33): Api\\Models\\DataAccess\\Read\\BaseReader->fetchAll(Object(Api\\Filters\\ActivityUserFilters), Array)
#11 /var/www/dev-team/dsprauel/api-unleashed/app/Http/Controllers/ActivityUsersController.php(21): Api\\Models\\Business\\BaseBusiness->fetchAll(Object(Api\\Filters\\ActivityUserFilters), Array)
#12 [internal function]: Api\\Http\\Controllers\\ActivityUsersController->index(Object(Api\\Filters\\ActivityUserFilters))
#13 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): call_user_func_array(Array, Array)
#14 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(45): Illuminate\\Routing\\Controller->callAction('index', Array)
#15 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Routing/Route.php(219): Illuminate\\Routing\\ControllerDispatcher->dispatch(Object(Illuminate\\Routing\\Route), Object(Api\\Http\\Controllers\\ActivityUsersController), 'index')
#16 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Routing/Route.php(176): Illuminate\\Routing\\Route->runController()
#17 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Routing/Router.php(680): Illuminate\\Routing\\Route->run()
#18 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(30): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#19 /var/www/dev-team/dsprauel/api-unleashed/app/Http/Middleware/MaintenanceMiddleware.php(20): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#20 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Api\\Http\\Middleware\\MaintenanceMiddleware->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#21 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#22 /var/www/dev-team/dsprauel/api-unleashed/app/Http/Middleware/CheckKeyMiddleware.php(32): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#23 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Api\\Http\\Middleware\\CheckKeyMiddleware->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#24 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#25 /var/www/dev-team/dsprauel/api-unleashed/app/Http/Middleware/LocaleMiddleware.php(51): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#26 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Api\\Http\\Middleware\\LocaleMiddleware->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#27 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#28 /var/www/dev-team/dsprauel/api-unleashed/app/Http/Middleware/AuthMiddleware.php(102): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#29 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Api\\Http\\Middleware\\AuthMiddleware->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#30 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#31 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(41): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#32 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\\Routing\\Middleware\\SubstituteBindings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#33 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#34 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#35 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\\View\\Middleware\\ShareErrorsFromSession->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#36 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#37 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(56): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#38 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\\Session\\Middleware\\StartSession->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#39 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#40 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#41 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#42 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#43 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(66): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#44 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#45 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#46 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(104): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#47 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Routing/Router.php(682): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#48 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Routing/Router.php(657): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
#49 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Routing/Router.php(623): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
#50 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Routing/Router.php(612): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
#51 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(176): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
#52 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(30): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
#53 /var/www/dev-team/dsprauel/api-unleashed/app/Http/Middleware/ClearCacheMiddleware.php(16): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#54 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Api\\Http\\Middleware\\ClearCacheMiddleware->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#55 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#56 /var/www/dev-team/dsprauel/api-unleashed/app/Http/Middleware/SqlDebugMiddleware.php(14): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#57 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Api\\Http\\Middleware\\SqlDebugMiddleware->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#58 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#59 /var/www/dev-team/dsprauel/api-unleashed/app/Http/Middleware/CheckHeadersMiddleware.php(36): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#60 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Api\\Http\\Middleware\\CheckHeadersMiddleware->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#61 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#62 /var/www/dev-team/dsprauel/api-unleashed/vendor/fideloper/proxy/src/TrustProxies.php(57): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#63 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Fideloper\\Proxy\\TrustProxies->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#64 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#65 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#66 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#67 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#68 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#69 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#70 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#71 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#72 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#73 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#74 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php(62): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#75 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\\Foundation\\Http\\Middleware\\CheckForMaintenanceMode->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#76 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#77 /var/www/dev-team/dsprauel/api-unleashed/app/Http/Middleware/CorsMiddleware.php(35): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#78 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Api\\Http\\Middleware\\CorsMiddleware->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#79 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#80 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(104): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#81 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(151): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#82 /var/www/dev-team/dsprauel/api-unleashed/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(116): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#83 /var/www/dev-team/dsprauel/api-unleashed/public/index.php(55): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#84 {main}

Environment

mr-Sepi0l commented 4 years ago

Alright got the problem:

protected function pinned($value)
    {
        return $this->builder->where('pinned', (int)$value);
    }

I don't really know why i have to cast my $value into en integer... I'm stupid, i should have put the $value instead of generating an array. My bad.

mikebronner commented 4 years ago

@DavidSprauel Do you still need to cast it to an integer, even if you are not generating an array? Let me know if you do, as I don't believe that is expected.