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;
}
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 sign in or create an account to participate in this conversation.