laravel-mongodb
laravel-mongodb copied to clipboard
Adding withCount in mongodb request I got Illegal offset type error
In laravel 9 with MongoDB(jenssegers/mongodb 3.9) I added withCount in request :
$subscription = Subscription
::getById($subscriptionId)
->withCount('userSubscriptions')
->firstOrFail();
and got error :
[2022-08-16 14:02:18] local.ERROR: Illegal offset type {"userId":"62fb9ff9f74eb576f803a7b2","exception":"[object] (TypeError(code: 0): Illegal offset type at Project/vendor/jenssegers/mongodb/src/Query/Builder.php:373)
[stacktrace]
#0 Project/vendor/jenssegers/mongodb/src/Query/Builder.php(201): Jenssegers\\Mongodb\\Query\\Builder->getFresh()
#1 Project/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(698): Jenssegers\\Mongodb\\Query\\Builder->get()
#2 Project/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(682): Illuminate\\Database\\Eloquent\\Builder->getModels()
#3 Project/vendor/laravel/framework/src/Illuminate/Database/Concerns/BuildsQueries.php(296): Illuminate\\Database\\Eloquent\\Builder->get()
#4 Project/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(582): Illuminate\\Database\\Eloquent\\Builder->first()
#5 Project/app/Http/Controllers/Admin/SubscriptionController.php(162): Illuminate\\Database\\Eloquent\\Builder->firstOrFail()
#6 Project/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): App\\Http\\Controllers\\Admin\\SubscriptionController->edit()
#7 Project/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(45): Illuminate\\Routing\\Controller->callAction()
#8 Project/vendor/laravel/framework/src/Illuminate/Routing/Route.php(261): Illuminate\\Routing\\ControllerDispatcher->dispatch()
#9 Project/vendor/laravel/framework/src/Illuminate/Routing/Route.php(204): Illuminate\\Routing\\Route->runController()
#10 Project/vendor/laravel/framework/src/Illuminate/Routing/Router.php(725): Illuminate\\Routing\\Route->run()
I tried to debug this error in src/Query/Builder.php file:
$columns = [];
// Convert select columns to simple projections.
\Log::info(varDump($this->columns, ' -1 $this->columns::'));
foreach ($this->columns as $column) {
$columns[$column] = true; // THIS LINE RAISED ERROR
}
I see in log file:
[2022-08-16 14:02:18] local.INFO: Array(2) : -1 $this->columns:: : Array
(
[0] => subscriptions.*
[1] => Illuminate\Database\Query\Expression Object
(
[value:protected] => (select "subscription_id" from "user_subscriptions" where "subscription_id" exists ?) as "user_subscriptions_count"
)
)
Relation is set in app/Models/Subscription.php :
public function userSubscriptions()
{
return $this->hasMany('App\Models\UserSubscription', 'subscription_id', '_id');
}
This relation is used in boot method :
protected static function boot()
{
parent::boot();
static::deleting(function ($subscription) {
$subscription->userSubscriptions()->delete();
});
}
and all related userSubscriptions are deleted ok. Error only on withCount.
How that can be fixed ?
Thanks!