Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

drs997's avatar

More efficient way to build chart data

Hey all,

I am building an array of data to pass to chartjs. I am trying to figure out a more efficient way of building this array, rather than querying the database twice for each point.

I need to obtain a feedback count and average for each date. Any suggestions?

Thank you!

      foreach ($dates as $date) {
            $start = Carbon::parse($date)->startOfDay();
            $finish = Carbon::parse($date)->endOfDay();

            $data['labels'][] = $date->format('j M');
            $data['data']['responses'][] = $project->feedback()->whereBetween('created_at', [$start, $finish])->count() ?: 0;
            $data['data']['average'][] = $project->feedback()->whereBetween('created_at', [$start, $finish])->avg('score') ?: 0;
        }
0 likes
1 reply
Tjyoung's avatar

Try following,

$projectFeedBack = $project->feedback()->whereDate("created_at", '>=', $start)
        ->whereDate("created_at", '<=', $finish)->get();
    
    $data['labels'][] = $date->format('j M');
    $data['data']['responses'][] = $projectFeedBack->count() ?? 0;
    $data['data']['average'][] = $projectFeedBack->avg('score') ?? 0;

Please or to participate in this conversation.