Laravel如何根据查询按天渲染成融合图表
Posted
技术标签:
【中文标题】Laravel如何根据查询按天渲染成融合图表【英文标题】:Laravel how to render into fusion charts by day based on the query 【发布时间】:2020-05-08 17:46:05 【问题描述】:基本上我想像这样渲染我的图表
在fusioncharts中说,我的数据应该是这样才能渲染出来的
"data": [
"label": "January 21, 2020",
"value": "3"
,
"label": "January 22, 2020",
"value": "1"
,
"label": "January 23, 2020",
"value": "2"
,
"label": "January 24, 2020",
"value": "1"
,
但是在我这样的查询中
public function getGraph()
$ext = \DB::table('checkers')
->where('remarks_id',2)
->join('schedules','schedules.id','=','checkers.schedule_id')
->join('teachers','schedules.teacher_id','=','teachers.id')
->where('schedules.teacher_id',1)
->count();
$date = \DB::table('checkers')
->where('remarks_id',2)
->select(\DB::raw("DATE_FORMAT(checkers.created_at, '%M %d, %Y') date "))
->join('schedules','schedules.id','=','checkers.schedule_id')
->join('teachers','schedules.teacher_id','=','teachers.id')
->get();
return response()->json([
'count' => $ext,
'date' => $date
]);
注意remarks_id = 2
和teacher_id
是基于我选择的老师。
结果是这样的
"count": 1,
"date": [
"date": "January 21, 2020"
,
"date": "January 23, 2020"
]
上面写着count : 1
,但正确的值是两个,因为有两个日期表示为缺席。
这是我的桌子 跳棋
+----+-------------+---------+------------+---------------------------+---------------------+------------+------------+
| id | schedule_id | user_id | remarks_id | status | created_at | updated_at | deleted_at |
+----+-------------+---------+------------+---------------------------+---------------------+------------+------------+
| 1 | 1 | 1 | 2 | Round 1 and 2 For sched 1 | 2020-01-21 00:00:00 | NULL | NULL |
| 5 | 3 | 1 | 9 | Schedule 3 | 2020-01-22 00:00:00 | NULL | NULL |
| 6 | 2 | 1 | 2 | Schedule 2 | 2020-01-23 00:00:00 | NULL | NULL |
+----+-------------+---------+------------+---------------------------+---------------------+------------+------------+
When I was going to get the absent, i used `created_at` column for displaying the dates, I used `DATE_FORMAT(created_at)` in order to format it.
时间表
+----+-----------------+------------+---------+-------------+------------+----------+-----------+
| id | subject_code_id | teacher_id | room_id | school_year | start_time | end_time | day |
+----+-----------------+------------+---------+-------------+------------+----------+-----------+
| 1 | 1 | 1 | 1 | 2020 | 10:30 PM | 12:30 AM | M-T-W-T-F |
| 2 | 2 | 2 | 2 | 2020 | 5:30 PM | 6:30 PM | M-T-W-T-F |
| 3 | 3 | 1 | 3 | 2020 | 10:30 PM | 11:30 AM | SAT |
+----+-----------------+------------+---------+-------------+------------+----------+-----------+
我只想绘制员工每天的缺勤情况并计算它我不知道为什么我得到count 1
有两个日期所以这意味着teacher_id = 1
有两个缺勤。正如您在跳棋中看到的那样,schedules
中的teacher_id = 1
表示不存在remarks_id = 2
。
teacher_id = 1
有两个时间表,即schedules
表中的1
和3
.. 您可以在checkers
中看到schedule_id = 1
和3
,即teacher_id = 1
我怎样才能让它显示在折线图上?这个查询对我来说似乎很棘手。我希望你明白我的意思。此外,如果老师有两个时间表并且他当天缺席,那么他当天的计数将是2
,因为他有两个时间表。感谢您的帮助。
【问题讨论】:
【参考方案1】:你有正确的计数。您的查询应该返回 1 而不是您假设的 2。从表 checkers
中选择 2 行字段 schedule_id
的值等于 1 和 2。然后您通过该字段从表 Schedules 中选择接下来的 2 行,其中包含字段 teacher_id
的值 1 和 2。但是我们有条件,我们应该从表schedules
中只选择值为teacher_id = 1 的行,这就是为什么你的第二个字段teacher_id = 2 的选择结果被过滤并且你只得到一个满足所有两个where
条件的行。
我假设您在将手动测试数据添加到表时犯了一些错误。这就是为什么您会得到其他结果而不是预期的原因。
您可以将第二个 sql 修改为如下内容:
->select(\DB::raw("COUNT(checkers.id) `value` "), \DB::raw("DATE_FORMAT(checkers.created_at, '%M %d, %Y') label "))
别忘了group by
,你会得到适合 fusioncharts 的 json。
【讨论】:
谢谢,我没注意到!现在我的问题是如何在图中输出这个以上是关于Laravel如何根据查询按天渲染成融合图表的主要内容,如果未能解决你的问题,请参考以下文章