laravel - 使用 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",
},
],
},
],
}
问题
- 它真的不像我的图表库所期望的系列。
- 我不确定如何添加
null
到没有组数据点的情况。 - 例如,如果某个日期没有“取消”,我想要一个
null
或0
而不是跳过。
我不确定在 Eloquent 中是否有任何体面和有效的方法来做到这一点?
解决方案
不在 Eloquent 中,因为您无法从无到有添加数据。
但是您可以使用 CarbonPeriod,如下所示:
$ranges = CarbonPeriod::create($start_date, '1 day', $end_date);
您可以遍历 $ranges 并操作/合并您的数据
推荐阅读
- c - 将二进制文件读取为 utf-16 c
- python - GCP - Cloud Function 在同一项目中找不到来自 Artifact Registry 的 Python 包
- javascript - 如何将组件方法绑定到 ExtJS 中的 ViewModel?
- vue.js - 带有更新输入值的 vue 提交表单
- python - 如何将 .txt 文件解码为图像格式
- c - 为字符数组分配内存量并从最后填充它是否合法?
- python - 通过使用 Django 多态模型的关系
- ios - 当键盘出现在垂直 ScrollView SwiftUI 内的水平 ScrollView 中时,向上移动 TextField
- r - R中的数据争吵-如何从小标题中列出具有超过一定数量的特定值的列
- r - 根据条件过滤重复项