Как отобразить все дни на графике за текущий месяц, используя Laravel - PullRequest
0 голосов
/ 22 января 2020

Раньше я работал над тем, как отображать данные на графике от контроллера, а затем до самого внешнего интерфейса. Теперь, когда я его получил, мне нужно отобразить на графике все дни текущего месяца, поскольку я могу отображать данные на графике, поскольку текущее решение еще не завершено.

Я использовал столбец created_at в моей таблице для создания даты и отформатировал ее. Вы можете показать в запросе ..

Мой запрос похож на этот

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("COUNT(checkers.id) `value` "), \DB::raw("DATE_FORMAT(checkers.created_at, '%M %d, %Y') label "))
        ->join('schedules','schedules.id','=','checkers.schedule_id')
        ->join('teachers','schedules.teacher_id','=','teachers.id')
        ->where('schedules.teacher_id',1)
        ->groupBy('label')
        ->get();        

    return response()->json([
        'count' => $ext,
        'date' => $date
    ]);
}

Мой json равен

{
  "count": 4,
  "date": [
    {
      "value": 1,
      "label": "January 21, 2020"
    },
    {
      "value": 3,
      "label": "January 23, 2020"
    }
  ]
}

Мой график такой enter image description here

На графике есть пробелы. Я хочу заполнить график датами текущего месяца на основе моего запроса. Это возможно? Я использовал fusioncharts и vue между прочим.

1 Ответ

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

Добавьте day к выбору вашего запроса:

$date = \DB::table('checkers')
    ->select(
        \DB::raw("COUNT(checkers.id) `value`"),
        \DB::raw("DATE_FORMAT(checkers.created_at, '%M %d, %Y') label")
        \DB::raw("DATE_FORMAT(checkers.created_at, '%d') day")
    )
    //...
    ->get();

Нам нужно day, чтобы иметь возможность слияния.

Затем получите все дни текущего месяца, используя CarbonPeriod в желаемом формате и объединить с результатами вашего запроса:

$daysOfMonth = collect(
    \Carbon\CarbonPeriod::create(
        now()->startOfMonth(),
        now()->endOfMonth()
    ))
    ->map(function ($date) {
        return [
            'value' => 0,
            'label' => $date->format('F d, Y'),
            'day' => $date->format('d')
        ];
    })
    ->keyBy('day')
    ->merge(
        $date->keyBy('day')
    )
    ->sortKeys()
    ->values();
...