我有这个方法返回两个日期之间生日的所有用户,我正在进行以下查询(使用laravel):
public function birthdays()
{
return Contact::whereBetween(DB::raw('DATE_FORMAT(birthday, "%m-%d")'), array(
$this->startDate->format('m-d'),
$this->endDate->format('m-d')))
->get();
}
它完美无缺。但是,当我在12月和1月之间进行搜索时,它不起作用,因为查询返回null,显然,因为它在没有年份的情况下进行搜索。在我的数据库中,我只将生日存储为他们的完整生日,例如:1985-01-10。
我怎样才能让它能够在12月 - > 1月或11月 - >之间进行搜索?
编辑:我无法在查询中添加年份,因为它不会返回所有生日。或者我错过了什么?
public function upcomingMonths($months = '2')
{
$this->startDate = Carbon::now();
$this->endDate = Carbon::now()->addMonth(''.$months.'');
return $this;
}
我使用的课程不仅仅是返回生日,例如,约会和其他东西,因为我链接方法:
$calendar = new App\Calendar;
$appointments = $calendar->upcomingMonths()->appointments();
$birthdays = $calendar->upcomingMonths()->birthdays();
编辑:让它像这样工作:
if($this->month($this->endDate) < $this->month($this->startDate))
{
$a = Contact::whereBetween(DB::raw('DATE_FORMAT(birthday, "%m-%d")'), array(
$this->startDate->format('m-d'),
'12-31'))
->get();
$b = Contact::whereBetween(DB::raw('DATE_FORMAT(birthday, "%m-%d")'), array(
'01-01',
$this->endDate->format('m-d')))
->get();
$result = $a->merge($b);
dd($result);
}
答案 0 :(得分:1)
如果您无法添加年份且问题发生在年末,您可以检测结束日期是否已更改年份(结束日期月份&lt;开始日期月份),然后将查询拆分为2 :一个从开始日期到年底,另一个从年初到结束日期。然后你必须合并两个集合并返回它。