From 088e12f86dec24840d4a29d31c5d835c937eb42c Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Sat, 21 Mar 2020 07:39:05 +0800 Subject: [PATCH] Refactor birthday query --- app/Http/Controllers/BirthdayController.php | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/app/Http/Controllers/BirthdayController.php b/app/Http/Controllers/BirthdayController.php index 361e2a8..fd75d65 100644 --- a/app/Http/Controllers/BirthdayController.php +++ b/app/Http/Controllers/BirthdayController.php @@ -3,27 +3,28 @@ namespace App\Http\Controllers; use App\User; -use Carbon\Carbon; use Illuminate\Support\Facades\DB; class BirthdayController extends Controller { public function index() { - $userBirthdayQuery = User::whereNotNull('dob') - ->select('users.name', - 'users.dob', - 'users.id as user_id' - ); + $users = $this->getUpcomingBirthdays(); + + return view('birthdays.index', compact('users')); + } - $currentMonth = Carbon::now()->format('m'); - $nextMonth = Carbon::now()->addMonth()->format('m'); - $userBirthdayQuery->whereIn(DB::raw("month(dob)"), [$currentMonth, $nextMonth]); + private function getUpcomingBirthdays() + { + $birthdayDateRaw = "concat(YEAR(CURDATE()), '-', RIGHT(dob, 5)) as birthday_date"; + + $userBirthdayQuery = User::whereNotNull('dob') + ->select('users.name', 'users.dob', 'users.id as user_id', DB::raw($birthdayDateRaw)) + ->orderBy('birthday_date', 'asc') + ->havingBetween('birthday_date', [today()->format('Y-m-d'), today()->addDays(60)->format('Y-m-d')]); - $users = $userBirthdayQuery->get()->filter(function ($user) { - return $user->birthday_remaining < 60 && $user->birthday_remaining >= 0; - })->sortBy('birthday_remaining'); + $users = $userBirthdayQuery->get(); - return view('birthdays.index', compact('users', 'currentMonth', 'nextMonth')); + return $users; } }