where('user_id', $user->id)->count(); $completedLessons = $user->academyLessonProgress()->whereNotNull('completed_at')->count(); foreach (AcademyBadge::query()->active()->get() as $badge) { $rules = (array) ($badge->rules ?? []); if (isset($rules['complete_lessons']) && $completedLessons < (int) $rules['complete_lessons']) { continue; } if (isset($rules['save_prompts']) && $savedPromptCount < (int) $rules['save_prompts']) { continue; } $user->academyBadges()->syncWithoutDetaching([ $badge->id => ['awarded_at' => now()], ]); } } }