You need to clone the query because the active scope is mutating the query Builder instance:
'active_users' => $userModel->clone()->active()->count(), // 5
'inactive_users' => $userModel->clone()->inactive()->count() // 0
Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.
Hello guys!
In my case , I need to return this data from model :
1- list of pagination users
2- count all users
3- count active users
4- count inactive users
my query looks like:
$userModel = User::query();
return Inertia::render('Home', [
'users' => $userModel->paginate(), // list of users
'total_users' => $userModel->count(), // 10
'active_users' => $userModel->active()->count(), // 5
'inactive_users' => $userModel->inactive()->count() // 0
]);
and the active/inactive scope looks like :
public function scopeActive($query)
{
$query->where('status', UserStatus::Active->value);
}
The problem is :
any query after active_users will return 0. like inactive_users always return 0 .
How can I achive that without create new instance from User model.
Thanks.
You need to clone the query because the active scope is mutating the query Builder instance:
'active_users' => $userModel->clone()->active()->count(), // 5
'inactive_users' => $userModel->clone()->inactive()->count() // 0
Please or to participate in this conversation.