我很想在接下來的 3 天內得到生日的員工。我試圖通過使用以下查詢來做到這一點。
public function upcomingBirthdays()
{
$from = now()->format('m-d');
$to = now()->addDays(3)->format('m-d');
$employees = Employees::whereRaw("DATE_FORMAT(dob, '%m-%d') BETWEEN '{$from}' AND '{$to}'")
->where('team_id', 13)
->where('status', 1)
->orderBy('dob', 'DESC')
->get();
return view('frontend.employee.birthdays', compact('employees'));
}
// End Method
但這并沒有回傳預期的資料。
今天是2022-11-09
這是在2022-11-08和2022-11-10之間 回傳的生日員工。但不回傳在 11-11 和 11-12 生日的員工。
uj5u.com熱心網友回復:
問題可能與日期格式有關。使用 DD 而不是 d 你會得到一個前導零來表示一個月的一位數日。月份相同:使用 MM 而不是 m。
注意:對于 1 月 1 日、2 日和 3 日的生日,這仍然會失敗。
uj5u.com熱心網友回復:
您可能需要從 nesbot 到處理日期的 Carbon 包。我沒有使用內置 PHP 測驗日期內的查詢,但我的代碼適用于 Carbon 包。
所以,根據你的情況,試試這個:
$employees = Employee::whereBetween('dob', [Carbon::now(), Carbon::now()->addDay(3)])->get();
uj5u.com熱心網友回復:
最終對我有用的解決方案:
$employees = Employees::where('team_id', 13)
->where('status', 1)
->where(function($q){
$q->where('dob', 'like', '%' . Carbon::now()->format('m-d'))
->orWhere('dob', 'like', '%' . Carbon::now()->addDays()->format('m-d'))
->orWhere('dob', 'like', '%' . Carbon::now()->addDays(2)->format('m-d'))
->orWhere('dob', 'like', '%' . Carbon::now()->addDays(3)->format('m-d'))
->orderBy(DB::raw("DATE_FORMAT(dob,'%m-%d')"), 'ASC');
})
->get();
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/531420.html
標籤:php拉拉维尔雄辩
上一篇:在laravel中同步多個ID
