- Laravel Version: 5.3.30
- Laravel-MongoDB Version: 3.2.1
- PHP Version: 7.1.2
Description
I'm getting an error when trying to use the Eloquent 'withCount' method.
Error
````
ErrorException: Illegal offset type in ./vendor/jenssegers/mongodb/src/Jenssegers/Mongodb/Query/Builder.php:353
Stack trace:
0 ./vendor/jenssegers/mongodb/src/Jenssegers/Mongodb/Query/Builder.php(353): Illuminate\Foundation\Bootstrap\HandleExceptions->handleError(2, 'Illegal offset ...', '/Users/b-argo/D...', 353, Array)
1 ./vendor/jenssegers/mongodb/src/Jenssegers/Mongodb/Query/Builder.php(206): Jenssegers\Mongodb\Query\Builder->getFresh(Array)
2 ./vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(638): Jenssegers\Mongodb\Query\Builder->get(Array)
3 ./vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(327): Illuminate\Database\Eloquent\Builder->getModels(Array)
4 ./app/Http/Controllers/Directory/CategoriesController.php(25): Illuminate\Database\Eloquent\Builder->get()
5 [internal function]: App\Http\Controllers\Directory\CategoriesController->getFoodCategories()
6 ./vendor/laravel/framework/src/Illuminate/Routing/Controller.php(55): call_user_func_array(Array, Array)
7 ./vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(44): Illuminate\Routing\Controller->callAction('getFoodCategori...', Array)
8 ./vendor/laravel/framework/src/Illuminate/Routing/Route.php(189): Illuminate\Routing\ControllerDispatcher->dispatch(Object(Illuminate\Routing\Route), Object(App\Http\Controllers\Directory\CategoriesController), 'getFoodCategori...')
9 ./vendor/laravel/framework/src/Illuminate/Routing/Route.php(144): Illuminate\Routing\Route->runController()
10 ./vendor/laravel/framework/src/Illuminate/Routing/Router.php(653): Illuminate\Routing\Route->run(Object(Illuminate\Http\Request))
11 ./vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Routing\Router->Illuminate\Routing{closure}(Object(Illuminate\Http\Request))
12 ./vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(41): Illuminate\RoutingPipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request))
13 ./vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\Routing\Middleware\SubstituteBindings->handle(Object(Illuminate\Http\Request), Object(Closure))
14 ./vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(33): IlluminatePipelinePipeline->IlluminatePipeline{closure}(Object(Illuminate\Http\Request))
15 ./vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(49): Illuminate\RoutingPipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request))
16 ./vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\Routing\Middleware\ThrottleRequests->handle(Object(Illuminate\Http\Request), Object(Closure), '60', '1')
17 ./vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(33): IlluminatePipelinePipeline->IlluminatePipeline{closure}(Object(Illuminate\Http\Request))
18 ./vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(104): Illuminate\RoutingPipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request))
19 ./vendor/laravel/framework/src/Illuminate/Routing/Router.php(655): IlluminatePipelinePipeline->then(Object(Closure))
20 ./vendor/laravel/framework/src/Illuminate/Routing/Router.php(629): Illuminate\Routing\Router->runRouteWithinStack(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request))
21 ./vendor/laravel/framework/src/Illuminate/Routing/Router.php(607): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request))
22 ./vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(268): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
23 ./vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http{closure}(Object(Illuminate\Http\Request))
24 ./vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php(46): Illuminate\RoutingPipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request))
25 ./vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode->handle(Object(Illuminate\Http\Request), Object(Closure))
26 ./vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(33): IlluminatePipelinePipeline->IlluminatePipeline{closure}(Object(Illuminate\Http\Request))
27 ./vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(104): Illuminate\RoutingPipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request))
28 ./vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(150): IlluminatePipelinePipeline->then(Object(Closure))
29 ./vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(117): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request))
30 ./vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php(582): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request))
31 ./vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithPages.php(90): Illuminate\Foundation\Testing\TestCase->call('GET', 'http://localhos...', Array, Array, Array)
32 ./vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithPages.php(61): Illuminate\Foundation\Testing\TestCase->makeRequest('GET', 'http://localhos...')
33 ./tests/Http/Controllers/Directory/CategoriesControllerTest.php(33): Illuminate\Foundation\Testing\TestCase->visit('/api/views/food')
34 [internal function]: App\Test\Http\Controllers\Directory\CategoriesControllerTest->testGetFoodCategories()
35 ./vendor/phpunit/phpunit/src/Framework/TestCase.php(1120): ReflectionMethod->invokeArgs(Object(App\Test\Http\Controllers\Directory\CategoriesControllerTest), Array)
36 ./vendor/phpunit/phpunit/src/Framework/TestCase.php(971): PHPUnit_Framework_TestCase->runTest()
37 ./vendor/phpunit/phpunit/src/Framework/TestResult.php(709): PHPUnit_Framework_TestCase->runBare()
38 ./vendor/phpunit/phpunit/src/Framework/TestCase.php(926): PHPUnit_Framework_TestResult->run(Object(App\Test\Http\Controllers\Directory\CategoriesControllerTest))
39 ./vendor/phpunit/phpunit/src/Framework/TestSuite.php(728): PHPUnit_Framework_TestCase->run(Object(PHPUnit_Framework_TestResult))
40 ./vendor/phpunit/phpunit/src/TextUI/TestRunner.php(521): PHPUnit_Framework_TestSuite->run(Object(PHPUnit_Framework_TestResult))
41 ./vendor/phpunit/phpunit/src/TextUI/Command.php(188): PHPUnit_TextUI_TestRunner->doRun(Object(PHPUnit_Framework_TestSuite), Array, true)
42 ./vendor/phpunit/phpunit/src/TextUI/Command.php(118): PHPUnit_TextUI_Command->run(Array, true)
43 ./vendor/phpunit/phpunit/phpunit(52): PHPUnit_TextUI_Command::main()
44 {main}
````
Steps to reproduce
If I call the Eloquent method 'withCount' (inherited from \Illuminate\Database\Eloquent\Builder) I get the error outlined above. This error is occuring when either you pass in a string corresponding to the relationship name (e.g. Food::withCount('venues')), or an array of relationship names (e.g. Food::withCount(['venues'])).
This is the code I am running:
````php
namespace App\Http\Controllers\Directory;
use App\Contracts\Http\Controllers\Directory\CategoriesController as ControllerContract;
use App\Http\Controllers\Controller;
use AppModels\Vendors\Venues\Categories\Food;
class CategoriesController extends Controller implements ControllerContract
{
/**
* Returns a list of all the food categories.
*
* @return Illuminate\Http\Response
*/
public function getFoodCategories()
{
$categories = Food::withCount('venues')->get();
return view('layouts.directory.categories', [
'categories' => $categories,
]);
}
}
````
Most helpful comment
I got around it using the following:
It's not the cleanest solution, but it works 馃檪