Laravel как рендерить в фьюжн-диаграммы по дням на основе запроса - PullRequest
0 голосов
/ 22 января 2020

По сути, я хочу отобразить свой график следующим образом:

enter image description here

В сказанных диаграммах слияния мои данные должны быть такими, чтобы они отображались

  "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 имеет два отсутствия. как вы можете видеть в шашках, remarks_id = 2 означает отсутствие для teacher_id = 1 в schedules.

у teacher_id = 1 есть два расписания, которые 1 и 3 в таблице schedules .. и вы можете видеть в checkers есть schedule_id = 1 и 3, что для teacher_id = 1

Как мне сделать так, чтобы он отображался на линейных графиках? Запрос кажется сложным для меня. Я надеюсь, вы понимаете, о чем я. А также, если у учителя есть два расписания, и он отсутствует на день, его счет за этот день будет 2, поскольку у него есть два графика. Спасибо за помощь.

1 Ответ

1 голос
/ 22 января 2020

Вы имеете право считать. Ваш запрос должен возвращать 1, а не 2, как вы предполагаете. Из таблицы checkers вы выбираете 2 строки со значениями поля schedule_id, которые равны 1 и 2. Затем вы выбираете этим полем следующие 2 строки из таблицы Расписания, которые содержат значения 1 и 2 поля teacher_id. Но у нас есть условие, что мы должны выбрать из таблицы 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 и Вы получите соответствующий json для термоядерных диаграмм.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...