laravel график js даты пропущены - PullRequest
0 голосов
/ 24 апреля 2020

может кто-нибудь помочь мне, пожалуйста .. У меня есть база данных с участниками деятельности и я хочу отобразить в таблице js данные за последние 7 дней.

id member_id bonus created_at
1    1         3     2020-04-16
2    1         3     2020-04-17
3    1         7     2020-04-18
4    1         5     2020-04-19
5    1         15    2020-04-20
6    1         10    2020-04-21
7    1         9     2020-04-22 
8    1         11    2020-04-24

мой laravel код

$chart = charts::where('member_id', Auth::user()->id)->orderBy('id', 'asc')->where('created_at', '>=', \Carbon\Carbon::today()->subDays(7))->get();

$bonus = [];
foreach ($charts as $index => $count) {
            $bonus[] = [$count->bonus];
        }
return view('index', ['bonus' => $bonus]);

проблема в графике, потому что отображать данные от 2020-04-17 до 2020-04-24 , и это логика c, но я хочу показать также в днях графика когда у участника нет бонуса, например 2020-04-23 , не существует, потому что у участника нет бонуса в этот день, поэтому мне нужно показать на графике 0 в 2020-04-23.

кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 24 апреля 2020

Я предположил, что ваш столбец created_at равен timestamp (для этого случая добавлено форматирование)

public function index()
{
    $start = Carbon::today()->subDays(7);
    $end = Carbon::yesterday();

    $activities = Activity::where('member_id', Auth::user()->id)
        ->where('created_at', '>=', Carbon::today()->subDays(7))
        ->get(['bonus', DB::raw("DATE_FORMAT(created_at,'%Y-%m-%d') as date")])
        ->pluck('bonus', 'date');

    $dates = $this->generateDates($start, $end); // you fill zero valued dates

    return $dates->merge($activities); // overwrite your bonuses with the zero values
}

public function generateDates(Carbon $startDate, Carbon $endDate, $format = 'Y-m-d')
{
    $dates = collect();
    $startDate = $startDate->copy();

    for ($date = $startDate; $date->lte($endDate); $date->addDay()) {
        $dates->put($date->format($format), 0);
    }

    return $dates;
}

для форматирования дат

$formattedDates = $dates->merge($activities)
            ->keys()
            ->transform(function ($date) {
                return Carbon::parse($date)->format('d F');
            });
...