首页 > 解决方案 > 使用 Eloquent 生成时间序列数据的最有效方法是什么?

问题描述

背景

所以我的目标是在下面创建一个图表。现在,它充满了虚拟数据,但你明白了。我使用的前端不支持日期时间多元时间序列,但我真的很喜欢它的简单性,所以我决定不更改图表库,而是按照它需要的结构生成数据。

在此处输入图像描述

const data = {
                labels: [
                    "2020-12-16",
                    "2020-12-17",
                    "2020-12-18",
                    "2020-12-19",
                ],
                datasets: [
                    {
                        name: "Confirmed", chartType: "bar",
                        values: [25, 40, 30, 35]
                    },
                    {
                        name: "Canceled", chartType: "bar",
                        values: [5, 10, 1, 8]
                    },
                    {
                        name: "No Show", chartType: "bar",
                        values: [1, null, 7, 4]
                    }
                ]
            }

雄辩

我在 Eloquent 上使用以下查询几乎可以满足我的要求,但有一些警告。

Booking
::whereSalonId({salonId})
->select('booking_status','created_at')->get()
->groupBy('booking_status')

它给了我下面这样的东西:

[!] Aliasing 'Booking' to 'App\Models\Booking' for this Tinker session.
=> Illuminate\Database\Eloquent\Collection {#2284
     all: [
       "confirmed" => Illuminate\Database\Eloquent\Collection {#2228
         all: [
           App\Models\Booking {#2328
             booking_status: "confirmed",
             created_at: "2020-11-16 13:11:31",
           },
           App\Models\Booking {#2330
             booking_status: "confirmed",
             created_at: "2020-11-16 13:22:05",
           },
           App\Models\Booking {#2332
             booking_status: "confirmed",
             created_at: "2020-11-17 04:59:15",
           },
           App\Models\Booking {#2333
             booking_status: "confirmed",
             created_at: "2020-11-17 06:30:13",
           },
           App\Models\Booking {#2334
             booking_status: "confirmed",
             created_at: "2020-11-17 06:38:02",
           },
           App\Models\Booking {#2335
             booking_status: "confirmed",
             created_at: "2020-11-17 06:54:07",
           },
           App\Models\Booking {#2336
             booking_status: "confirmed",
             created_at: "2020-11-17 06:59:25",
           },
           App\Models\Booking {#2337
             booking_status: "confirmed",
             created_at: "2020-11-17 07:02:57",
           },
           App\Models\Booking {#2338
             booking_status: "confirmed",
             created_at: "2020-11-17 07:03:54",
           },
           App\Models\Booking {#2339
             booking_status: "confirmed",
             created_at: "2020-11-17 07:15:57",
           },
           App\Models\Booking {#2340
             booking_status: "confirmed",
             created_at: "2020-11-17 07:17:08",
           },
           App\Models\Booking {#2341
             booking_status: "confirmed",
             created_at: "2020-11-17 07:18:07",
           },
           App\Models\Booking {#2342
             booking_status: "confirmed",
             created_at: "2020-11-17 07:20:26",
           },
           App\Models\Booking {#2343
             booking_status: "confirmed",
             created_at: "2020-11-17 08:38:33",
           },
           App\Models\Booking {#2344
             booking_status: "confirmed",
             created_at: "2020-12-05 16:36:28",
           },
           App\Models\Booking {#2345
             booking_status: "confirmed",
             created_at: "2020-12-06 04:37:48",
           },
           App\Models\Booking {#2346
             booking_status: "confirmed",
             created_at: "2020-12-06 04:40:39",
           },
           App\Models\Booking {#2347
             booking_status: "confirmed",
             created_at: "2020-12-06 04:45:06",
           },
           App\Models\Booking {#2348
             booking_status: "confirmed",
             created_at: "2020-12-06 04:49:17",
           },
           App\Models\Booking {#2349
             booking_status: "confirmed",
             created_at: "2020-12-06 04:50:18",
           },
           App\Models\Booking {#2350
             booking_status: "confirmed",
             created_at: "2020-12-06 04:51:38",
           },
           App\Models\Booking {#2351
             booking_status: "confirmed",
             created_at: "2020-12-06 05:06:14",
           },
           App\Models\Booking {#2352
             booking_status: "confirmed",
             created_at: "2020-12-06 05:23:10",
           },
           App\Models\Booking {#2353
             booking_status: "confirmed",
             created_at: "2020-12-06 05:31:41",
           },
           App\Models\Booking {#2354
             booking_status: "confirmed",
             created_at: "2020-12-06 05:37:50",
           },
           App\Models\Booking {#2355
             booking_status: "confirmed",
             created_at: "2020-12-06 05:40:17",
           },
           App\Models\Booking {#2356
             booking_status: "confirmed",
             created_at: "2020-12-06 05:47:06",
           },
           App\Models\Booking {#2357
             booking_status: "confirmed",
             created_at: "2020-12-06 05:52:36",
           },
           App\Models\Booking {#2358
             booking_status: "confirmed",
             created_at: "2020-12-06 05:54:21",
           },
           App\Models\Booking {#2359
             booking_status: "confirmed",
             created_at: "2020-12-06 06:12:18",
           },
           App\Models\Booking {#2360
             booking_status: "confirmed",
             created_at: "2020-12-06 06:18:07",
           },
           App\Models\Booking {#2361
             booking_status: "confirmed",
             created_at: "2020-12-07 05:14:47",
           },
           App\Models\Booking {#2362
             booking_status: "confirmed",
             created_at: "2020-12-07 05:55:49",
           },
           App\Models\Booking {#2363
             booking_status: "confirmed",
             created_at: "2020-12-07 05:58:59",
           },
           App\Models\Booking {#2364
             booking_status: "confirmed",
             created_at: "2020-12-14 20:45:09",
           },
           App\Models\Booking {#2366
             booking_status: "confirmed",
             created_at: "2020-12-16 19:52:34",
           },
           App\Models\Booking {#2367
             booking_status: "confirmed",
             created_at: "2020-12-17 20:44:26",
           },
           App\Models\Booking {#2368
             booking_status: "confirmed",
             created_at: "2020-12-18 07:28:47",
           },
           App\Models\Booking {#2369
             booking_status: "confirmed",
             created_at: "2020-12-18 23:28:34",
           },
           App\Models\Booking {#2373
             booking_status: "confirmed",
             created_at: "2020-12-19 03:47:51",
           },
         ],
       },
       "canceled" => Illuminate\Database\Eloquent\Collection {#2235
         all: [
           App\Models\Booking {#2331
             booking_status: "canceled",
             created_at: "2020-11-17 03:22:40",
           },
           App\Models\Booking {#2370
             booking_status: "canceled",
             created_at: "2020-12-18 23:30:28",
           },
           App\Models\Booking {#2371
             booking_status: "canceled",
             created_at: "2020-12-18 23:32:52",
           },
           App\Models\Booking {#2372
             booking_status: "canceled",
             created_at: "2020-12-19 03:39:43",
           },
         ],
       },
       "no_show" => Illuminate\Database\Eloquent\Collection {#2285
         all: [
           App\Models\Booking {#2365
             booking_status: "no_show",
             created_at: "2020-12-14 21:36:30",
           },
         ],
       },
     ],
   }

问题

我不确定在 Eloquent 中是否有任何体面和有效的方法来做到这一点?

标签: laraveleloquent

解决方案


不在 Eloquent 中,因为您无法从无到有添加数据。

但是您可以使用 CarbonPeriod,如下所示:

$ranges = CarbonPeriod::create($start_date, '1 day', $end_date);

您可以遍历 $ranges 并操作/合并您的数据

这里的例子


推荐阅读