I am trying to build a simple calendar using Carbon in Laravel 9. Also, I need to show some content from the database on specific dates. The calendar is well made without the other contents but with content, some dates which don't have external data are duplicated.
The controller code
$date = empty($date) ? Carbon::now() : Carbon::createFromDate($date);
$startOfCalendar = $date->copy()->firstOfMonth()->startOfWeek(Carbon::SUNDAY);
$endOfCalendar = $date->copy()->lastOfMonth()->endOfWeek(Carbon::SATURDAY);
$html = '<div class="calendar">';
$html .= '<div class="month-year">';
$html .= '<span class="month">' . $date->format('M') . '</span>';
$html .= '<span class="year">' . $date->format('Y') . '</span>';
$html .= '</div>';
$html .= '<div class="days">';
$dayLabels = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
foreach ($dayLabels as $dayLabel)
{
$html .= '<span class="day-label">' . $dayLabel . '</span>';
}
$get_events = CalendarEvents::where("event_date",">=",date("Y-m-d", strtotime($startOfCalendar)))->get();
while($startOfCalendar <= $endOfCalendar)
{
$extraClass = $startOfCalendar->format('m') != $date->format('m') ? 'dull' : '';
$extraClass .= $startOfCalendar->isToday() ? ' today' : '';
foreach ($get_events as $events) {
if($events->event_date == date('Y-m-d',strtotime($startOfCalendar))) {
$html .= '<span class="day flip' . $extraClass . '"><span class="content">' . $startOfCalendar->format('j').'|'.$events->event_name. '</span></span>';
}
else {
$html .= '<span class="day' . $extraClass . '"><span class="content">' . $startOfCalendar->format('j') . '</span></span>';
break;
}
}
$startOfCalendar->addDay();
}
$html .= '</div></div>';
Here the events' dates are printed once but dates without the events are printed multiple times. How can I correct this? Thanks in advance