Closed
Description
- 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\Routing\Pipeline->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): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#15 ./vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(49): Illuminate\Routing\Pipeline->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): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#18 ./vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(104): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#19 ./vendor/laravel/framework/src/Illuminate/Routing/Router.php(655): Illuminate\Pipeline\Pipeline->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\Routing\Pipeline->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): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#27 ./vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(104): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#28 ./vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(150): Illuminate\Pipeline\Pipeline->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 App\Models\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,
]);
}
}