php - Laravel8: How to show events in DB in fullcalendar ver5

I am trying to show events in DB in fullcalendar ver5 using laravel8. I was ale to show the calendar but each event isn't showing.

I was getting this message in Dev tool so I thought maybe JSON data wasn't being passed correctly but I couldn't figure out.

error

DB looks like this.

DB

My codes look like this.

web.php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\EventController;

Route::get('/calendar', [EventController::class, 'index'])->name('calendar.index');

namespace App\Http\Controllers;

EventController.php

use Illuminate\Http\Request;
use App\Models\Event;

class EventController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request)
    {
        if ($request->ajax()) {
            $events = Event::whereDate('start', '>=', $request->start)
                ->whereDate('end', '<=', $request->end)
                ->get();

            return response()->json($events);
        }

        return view('calendar2');
    }

calendar2.blade.php

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset='utf-8' />

    <meta name="csrf-token" content="{{ csrf_token() }}">
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
    <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.4.2/css/all.css" integrity="sha384-/rXc/GQVaYpyDdyxK+ecHPVYJSN9bmVFBvjA/9eOB+pb3F2w2N6fc5qB9Ew5yIns" crossorigin="anonymous">
    <link href="{{ asset('/css/main.css') }}" rel="stylesheet">
    <script src="{{ asset('/js/main.js') }}"></script>
    <script>
        document.addEventListener('DOMContentLoaded', function() {

            $.ajaxSetup({
                headers: {
                    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
                }
            });

            var calendarEl = document.getElementById('calendar');

            var calendar = new FullCalendar.Calendar(calendarEl, {
                locale: 'en',
                selectable: true,
                headerToolbar: {
                    left: 'prevYear,prev,next,nextYear today',
                    center: 'title',
                    right: 'addEventButton'
                },
                customButtons: {
                    addEventButton: {
                        text: 'add event',
                        click: function() {
                            var dateStr = $('#exampleModal').modal();
                            var date = new Date(dateStr + 'T00:00:00');

                            $(function() {
                                $('#register').click(function(e) {
                                    e.preventDefault();
                                    var vessel_name = $('#vessel-name').val();
                                    var start = $('#start-date').val() + ' ' + $('#start-time').val() + ':00';
                                    var end = $('#end-date').val() + ' ' + $('#end-time').val() + ':00';

                                    $.ajax({
                                        url: "{{ route('calendar.create') }}",
                                        data: {
                                            title: vessel_name,
                                            start: start,
                                            end: end
                                        },
                                        type: 'post',
                                    });
                                });
                            });
                        }
                    }
                },
                initialDate: '2022-01-01',
                navLinks: true,
                editable: true,
                dayMaxEvents: true,
                events: "{{ route('calendar.index') }}",
            });

            calendar.render();
        });
    </script>
    <style>
        body {
            margin: 40px 10px;
            padding: 0;
            font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
            font-size: 14px;
        }

        #calendar {
            max-width: 1100px;
            margin: 0 auto;
        }
    </style>
</head>

<body>

    <div id="calendar"></div>

    <div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel">
        <div class="modal-dialog" role="document">
            <div class="modal-content">
                <div class="modal-header">
                    <h5 class="modal-title" id="exampleModalLabel">add event</h5>
                    <button type="button" class="close" data-dismiss="modal" aria-label="close">
                        <span aria-hidden="true">&times;</span>
                    </button>
                </div>
                <div class="modal-body">
                    <div class="form-group mb-3">
                        <label for="lastName">title</label>
                        <input type="text" class="form-control" id="vessel-name" placeholder="">
                    </div>
                    <label for="lastName">start</label>
                    <div class="form-row">
                        <div class="col-md-6 mb-3">
                            <input type="date" class="form-control" id="start-date" value="2022-01-01">
                        </div>
                        <div class="col-md-6 mb-3">
                            <input type="time" class="form-control" id="start-time" value="08:00">
                        </div>
                    </div>
                    <label for="lastName">end</label>
                    <div class="form-row">
                        <div class="col-md-6 mb-3">
                            <input type="date" class="form-control" id="end-date" value="2022-01-04">
                        </div>
                        <div class="col-md-6 mb-3">
                            <input type="time" class="form-control" id="end-time" value="08:00">
                        </div>
                    </div>
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-secondary" data-dismiss="modal">close</button>
                    <button type="button" class="btn btn-primary" id="register">OK</button>
                </div>
            </div>
        </div>
    </div>

    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
</body>

</html>

Any help would be appreciated as I have tried multiple methods with no success.

Thank you in advance.

Answer

Solution:

You need to restrict the query to the data attributes you need to send.

Therefore, in your controller index

use Illuminate\Http\Request;
use App\Models\Event;

class EventController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request)
    {
        if ($request->ajax()) {
            $events = Event::whereDate('start', '>=', $request->start)
                ->whereDate('end', '<=', $request->end)
                ->get(['id', 'title', 'start', 'end']);

            return response()->json($events);
        }

        return view('calendar2');
    }

Source