Closed f-liva closed 4 years ago
The Model::selectSub
seems to be not part of the official Laravel documentation. Why don't you just load a relation instead and provide the sub-query there?
I had the same issue, here is my error tracing:
Symfony\Component\Debug\Exception\FatalThrowableError: Argument 1 passed to Spiritix\LadaCache\QueryHandler::setBuilder() must be an instance of Spiritix\LadaCache\Database\QueryBuilder, instance of Illuminate\Database\Query\Builder given, called in /www/laravel6/vendor/spiritix/lada-cache/src/Spiritix/LadaCache/Database/QueryBuilder.php on line 99
/www/laravel6/vendor/spiritix/lada-cache/src/Spiritix/LadaCache/QueryHandler.php:80
/www/laravel6/vendor/spiritix/lada-cache/src/Spiritix/LadaCache/Database/QueryBuilder.php:99
/www/laravel6/vendor/laravel/framework/src/Illuminate/Support/Traits/ForwardsCalls.php:23
/www/laravel6/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php:1377
/www/laravel6/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/QueriesRelationships.php:404
/www/laravel6/app/Http/Controllers/Admin/InviteCodesController.php:18
where on line InviteCodesController.php:18
calls withCount()
https://laravel.com/docs/6.x/eloquent-relationships#counting-related-models
I am using Laravel 6 with lada-cache 4.x. and selectSub
is a part of laravel components https://laravel.com/api/6.x/Illuminate/Database/Query/Builder.html#method_selectSub
However, I noticed from https://github.com/spiritix/lada-cache/issues/46 that a similar issue was fixed, so not sure why this still persists.
@adarmanto I can't provide support for older Laravel versions anymore, sorry. If anyone can reproduce this with Laravel 8, I'll look into it.
Can reproduce with Laravel 9 and php 8.0.6 Using also spatie/laravel-query-builder which is extending the query builder.
{
"message": "Spiritix\\LadaCache\\QueryHandler::setBuilder(): Argument #1 ($builder) must be of type Spiritix\\LadaCache\\Database\\QueryBuilder, Illuminate\\Database\\Query\\Builder given, called in /var/www/vendor/spiritix/lada-cache/src/Spiritix/LadaCache/Database/QueryBuilder.php on line 116",
"exception": "TypeError",
"file": "/var/www/vendor/spiritix/lada-cache/src/Spiritix/LadaCache/QueryHandler.php",
"line": 80,
"trace": [
{
"file": "/var/www/vendor/spiritix/lada-cache/src/Spiritix/LadaCache/Database/QueryBuilder.php",
"line": 116,
"function": "setBuilder",
"class": "Spiritix\\LadaCache\\QueryHandler",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Support/Traits/ForwardsCalls.php",
"line": 23,
"function": "selectSub",
"class": "Spiritix\\LadaCache\\Database\\QueryBuilder",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php",
"line": 1838,
"function": "forwardCallTo",
"class": "Illuminate\\Database\\Eloquent\\Builder",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/QueriesRelationships.php",
"line": 674,
"function": "__call",
"class": "Illuminate\\Database\\Eloquent\\Builder",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/QueriesRelationships.php",
"line": 691,
"function": "withAggregate",
"class": "Illuminate\\Database\\Eloquent\\Builder",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php",
"line": 1418,
"function": "withCount",
"class": "Illuminate\\Database\\Eloquent\\Builder",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php",
"line": 1369,
"function": "newQueryWithoutScopes",
"class": "Illuminate\\Database\\Eloquent\\Model",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasRelationships.php",
"line": 359,
"function": "newQuery",
"class": "Illuminate\\Database\\Eloquent\\Model",
"type": "->"
},
{
"file": "/var/www/app/Eyecolor.php",
"line": 18,
"function": "hasMany",
"class": "Illuminate\\Database\\Eloquent\\Model",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/QueriesRelationships.php",
"line": 848,
"function": "actors",
"class": "App\\Eyecolor",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/Relation.php",
"line": 104,
"function": "Illuminate\\Database\\Eloquent\\Concerns\\{closure}",
"class": "Illuminate\\Database\\Eloquent\\Builder",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/QueriesRelationships.php",
"line": 849,
"function": "noConstraints",
"class": "Illuminate\\Database\\Eloquent\\Relations\\Relation",
"type": "::"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/QueriesRelationships.php",
"line": 622,
"function": "getRelationWithoutConstraints",
"class": "Illuminate\\Database\\Eloquent\\Builder",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/QueriesRelationships.php",
"line": 691,
"function": "withAggregate",
"class": "Illuminate\\Database\\Eloquent\\Builder",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Support/Traits/ForwardsCalls.php",
"line": 23,
"function": "withCount",
"class": "Illuminate\\Database\\Eloquent\\Builder",
"type": "->"
},
{
"file": "/var/www/vendor/spatie/laravel-query-builder/src/QueryBuilder.php",
"line": 105,
"function": "forwardCallTo",
"class": "Spatie\\QueryBuilder\\QueryBuilder",
"type": "->"
},
{
"file": "/var/www/app/Http/Controllers/EyecolorController.php",
"line": 63,
"function": "__call",
"class": "Spatie\\QueryBuilder\\QueryBuilder",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 54,
"function": "index",
"class": "App\\Http\\Controllers\\EyecolorController",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php",
"line": 45,
"function": "callAction",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 261,
"function": "dispatch",
"class": "Illuminate\\Routing\\ControllerDispatcher",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 204,
"function": "runController",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 725,
"function": "run",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 141,
"function": "Illuminate\\Routing\\{closure}",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php",
"line": 50,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "handle",
"class": "Illuminate\\Routing\\Middleware\\SubstituteBindings",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
"line": 44,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "handle",
"class": "Illuminate\\Auth\\Middleware\\Authenticate",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 116,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 726,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 703,
"function": "runRouteWithinStack",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 667,
"function": "runRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 656,
"function": "dispatchToRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 167,
"function": "dispatch",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 141,
"function": "Illuminate\\Foundation\\Http\\{closure}",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/var/www/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php",
"line": 66,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "handle",
"class": "Barryvdh\\Debugbar\\Middleware\\InjectDebugbar",
"type": "->"
},
{
"file": "/var/www/vendor/anlutro/l4-settings/src/SaveMiddleware.php",
"line": 45,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "handle",
"class": "anlutro\\LaravelSettings\\SaveMiddleware",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
"line": 39,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\TrustProxies",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
"line": 31,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
"line": 40,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php",
"line": 27,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php",
"line": 86,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 116,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 142,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 111,
"function": "sendRequestThroughRouter",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/var/www/public/index.php",
"line": 56,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/var/www/server.php",
"line": 21,
"function": "require_once"
}
]
}
Hi
Using
Model::selectSub($subQuery, 'foo')
doesn't work using LadaCacheTraitThe error is
Argument 1 passed to Spiritix\LadaCache\QueryHandler::setBuilder() must be an instance of Spiritix\LadaCache\Database\QueryBuilder, instance of Illuminate\Database\Query\Builder given, called in D:\Progetti\laravel-vivicity\vendor\spiritix\lada-cache\src\Spiritix\LadaCache\Database\QueryBuilder.php on line 94