【问题标题】:Eloquent - group by "from date" to "to date" with a one day intervalEloquent - 按“从日期”到“至今”分组,间隔为 1 天
【发布时间】:2017-02-10 03:24:56
【问题描述】:

我有一个 Reservation 模型,它有 date_fromdate_to 字段。

如何按一天的间隔对预订进行分组,以便知道在特定日期有多少预订处于活动状态?

示例

Reservation::groupBy('...')->get()

输出:

reservations
==================
qty | date
------------------
3   | 2000-01-01
5   | 2000-01-02
2   | 2000-01-03
...

【问题讨论】:

    标签: mysql laravel laravel-5 eloquent laravel-query-builder


    【解决方案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();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-24
      • 2015-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-25
      • 1970-01-01
      • 2014-12-27
      相关资源
      最近更新 更多