До дебага сначала стоит отрефакторить код) чтобы уменьшить цикломатическую сложность и увеличить читаемость:
$lastActiveDate = date('Y-m-d H:i:s', strtotime('-90 days'));
$users = User::where('active', 1)
->whereDate('updated_at', '<=', $lastActiveDate)
->get();
if ($users->isEmpty()) {
return;
}
foreach ($users as $user) {
if ($user->isEmpty()) {
continue;
}
if ($user->active == 1) {
$user->active = 0;
$user->save();
}
}
Я не помню точно, но обычная функция empty не будет работать на коллекцию $users, на $user в форыче возможно
UPD. Вообще-то юзеры c is_active=1 уже отобраны в запросе, поэтому форыч можно свести к:
foreach ($users as $user) {
$user->active = 0;
$user->save();
}