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 = 2teacher_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 表中的13 .. 您可以在checkers 中看到schedule_id = 13,即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如何根据查询按天渲染成融合图表的主要内容,如果未能解决你的问题,请参考以下文章

Grafana 图表按天或月分组?

Laravel 查询生成器按天计算行数 SQL db::raw

Laravel Eloquent按天分组结果

使用Laravel 和 Vue 构建一个简单的SPA

Laravel 多订单按天分组查看

Laravel包的作曲家需要