Eloquent - 按“从日期”到“至今”分组,间隔为 1 天
Posted
技术标签:
【中文标题】Eloquent - 按“从日期”到“至今”分组,间隔为 1 天【英文标题】:Eloquent - group by "from date" to "to date" with a one day interval 【发布时间】:2017-02-10 03:24:56 【问题描述】:我有一个 Reservation
模型,它有 date_from
和 date_to
字段。
如何按一天的间隔对预订进行分组,以便知道在特定日期有多少预订处于活动状态?
示例
Reservation::groupBy('...')->get()
输出:
reservations
==================
qty | date
------------------
3 | 2000-01-01
5 | 2000-01-02
2 | 2000-01-03
...
【问题讨论】:
【参考方案1】:首先将“date_from”和“date_to”添加到模型上的$dates数组中
protected $dates = ['date_from', 'date_to'];
然后
$min_date = Reservation::select(DB::raw('MIN(date_from) as min'))->first();
$max_date = Reservation::select(DB::raw('MIN(date_to) as max'))->first();
$data = [];
if (!is_null($min_date) && !is_null($max_date))
$daterange = new DatePeriod(DateTime::createFromFormat('Y-m-d H:i:s', $min_date->min), new DateInterval('P1D') ,DateTime::createFromFormat('Y-m-d H:i:s', $max_date->max));
$reservations = Reservation::all();
foreach ($daterange as $date)
$data[$date->format('Y-m-d')] = $reservations->filter(function($reservation) use($date)
$carbon_date = Carbon::instance($date)->endOfDay();
return ($reservation->date_from->startOfDay()->lte($carbon_date) && $reservation->date_to->endOfDay()->gte($carbon_date));
)
->count();
【讨论】:
以上是关于Eloquent - 按“从日期”到“至今”分组,间隔为 1 天的主要内容,如果未能解决你的问题,请参考以下文章