You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Laravel Eloquent获取按日期分组的带时间日程数组

解决方案

可以通过Laravel集合的分组和映射方法,将查询结果转换为你需要的格式,代码实现如下:

// 先查询当前用户的日程,仅获取需要的字段以优化性能
$schedules = Schedule::where('user_id', auth()->user()->id)
    ->orderBy('reception_day')
    ->get(['reception_day', 'time_from', 'time_to']);

// 转换为目标格式的数组
$arr = $schedules
    // 按日期分组
    ->groupBy('reception_day')
    // 提取每个日期下的时间区间数据
    ->map(function ($dailySchedules) {
        return $dailySchedules->pluck(['time_from', 'time_to'])->toArray();
    })
    // 将每个日期和对应时间区间包装为单元素数组
    ->map(function ($timeSlots, $date) {
        return [$date => $timeSlots];
    })
    // 转换为索引数组(去掉日期键,改用0、1、2...的顺序索引)
    ->values()
    ->toArray();

代码说明

  1. 查询优化:查询时只选择reception_day、time_from、time_to字段,避免加载不必要的数据,提升性能。
  2. 按日期分组:使用groupBy('reception_day')将日程按日期归类,得到以日期为键、对应日程集合为值的关联集合。
  3. 提取时间区间:通过pluck方法提取每个日程的时间字段,转换为纯时间区间数组。
  4. 结构调整:第二个map将每个日期和时间区间包装成单元素数组,匹配你需要的外层结构。
  5. 转为索引数组:values()方法将关联集合转为顺序索引的集合,最终toArray()得到目标格式的数组。

内容的提问来源于stack exchange,提问作者Serhiy Lytvyn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 02:03:40