Laravel-mongodb: ErrorException: Illegal offset type in ./vendor/jenssegers/mongodb/src/Jenssegers/Mongodb/Query/Builder.php:353

Created on 11 Mar 2017  路  6Comments  路  Source: jenssegers/laravel-mongodb

  • 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,
    ]);
}

}

````

duplicate question

Most helpful comment

I got around it using the following:

$users = Users::with('relation')->get();

$users->transform(function ($item, $key) {
    $item->relation_count = $item->relation()->count();

    return $item;
});

It's not the cleanest solution, but it works 馃檪

All 6 comments

Yes, got same issue "Illegal offset type".

Also getting the same error.
Did you find a resolution to this?

Same here. Any solution?

Same error. Any workarounds?

I got around it using the following:

$users = Users::with('relation')->get();

$users->transform(function ($item, $key) {
    $item->relation_count = $item->relation()->count();

    return $item;
});

It's not the cleanest solution, but it works 馃檪

+1

Was this page helpful?
0 / 5 - 0 ratings

Related issues

Idnan picture Idnan  路  3Comments

imrannazirbhat picture imrannazirbhat  路  3Comments

tomartailored picture tomartailored  路  3Comments

viacheslavpleshkov picture viacheslavpleshkov  路  3Comments

lgt picture lgt  路  3Comments