How to install laravel 9
https://tutorial101.blogspot.com/2022/02/how-to-install-laravel-9.html
Connecting our Database
open .env file root directory.
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=
Create tables
php artisan make:migration create_events_table
C:\xampp\htdocs\laravel9\blog>php artisan make:migration create_events_table
Open new events migrations
yourproject/database/migrations
blog\database\migrations\_create_events_table.php
<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; return new class extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('events', function (Blueprint $table) { $table->id(); $table->string('title'); $table->date('start'); $table->date('end'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('events'); } };Database Migration
php artisan migrate
C:\xampp\htdocs\laravel9\blog>php artisan migrate
Migration table created successfully.
check database table
Creating Controller
php artisan make:controller FullCalenderController
C:\xampp\htdocs\laravel9\blog>php artisan make:controller FullCalenderController
change it with the following codes:
blog\app\Http\Controllers\FullCalenderController.php
//blog\app\Http\Controllers\FullCalenderController.php <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\Event; class FullCalenderController extends Controller { /** * Write code on Method * * @return response() */ public function index(Request $request) { if($request->ajax()) { $data = Event::whereDate('start', '>=', $request->start) ->whereDate('end', '<=', $request->end) ->get(['id', 'title', 'start', 'end']); return response()->json($data); } return view('fullcalender'); } /** * Write code on Method * * @return response() */ public function ajax(Request $request) { switch ($request->type) { case 'add': $event = Event::create([ 'title' => $request->title, 'start' => $request->start, 'end' => $request->end, ]); return response()->json($event); break; case 'update': $event = Event::find($request->id)->update([ 'title' => $request->title, 'start' => $request->start, 'end' => $request->end, ]); return response()->json($event); break; case 'delete': $event = Event::find($request->id)->delete(); return response()->json($event); break; default: # code... break; } } }Create Model
Model is used to get the data from the database.
php artisan make:model Event
C:\xampp\htdocs\laravel9\blog>php artisan make:model Event
blog\app\Models\Event.php
//blog\app\Models\Event.php <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Event extends Model { use HasFactory; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'title', 'start', 'end' ]; }Create Views
blog\resources\views\fullcalender.blade.php
//blog\resources\views\fullcalender.blade.php <!DOCTYPE html> <html> <head> <title>Laravel 9 Ajax FullCalender CRUD (Create, Read, Update and Delete)</title> <meta name="csrf-token" content="{{ csrf_token() }}"> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet"> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/fullcalendar/3.9.0/fullcalendar.css" /> <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/fullcalendar/3.9.0/fullcalendar.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/toastr.min.js"></script> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/toastr.min.css" /> </head> <body> <div class="container"> <h1>Laravel 9 Ajax FullCalender CRUD (Create, Read, Update and Delete)</h1> <div id='calendar'></div> </div> <script type="text/javascript"> $(document).ready(function () { /*Get Site URL*/ var SITEURL = "{{ url('/') }}"; /*CSRF Token Setup*/ $.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') } }); /*FullCalender JS*/ var calendar = $('#calendar').fullCalendar({ editable: true, events: SITEURL + "/fullcalender", displayEventTime: false, editable: true, eventRender: function (event, element, view) { if (event.allDay === 'true') { event.allDay = true; } else { event.allDay = false; } }, selectable: true, selectHelper: true, select: function (start, end, allDay) { var title = prompt('Event Title:'); if (title) { var start = $.fullCalendar.formatDate(start, "Y-MM-DD"); var end = $.fullCalendar.formatDate(end, "Y-MM-DD"); $.ajax({ url: SITEURL + "/fullcalenderAjax", data: { title: title, start: start, end: end, type: 'add' }, type: "POST", success: function (data) { displayMessage("Event Created Successfully"); calendar.fullCalendar('renderEvent', { id: data.id, title: title, start: start, end: end, allDay: allDay },true); calendar.fullCalendar('unselect'); } }); } }, eventDrop: function (event, delta) { var start = $.fullCalendar.formatDate(event.start, "Y-MM-DD"); var end = $.fullCalendar.formatDate(event.end, "Y-MM-DD"); $.ajax({ url: SITEURL + '/fullcalenderAjax', data: { title: event.title, start: start, end: end, id: event.id, type: 'update' }, type: "POST", success: function (response) { displayMessage("Event Updated Successfully"); } }); }, eventClick: function (event) { var deleteMsg = confirm("Do you really want to delete?"); if (deleteMsg) { $.ajax({ type: "POST", url: SITEURL + '/fullcalenderAjax', data: { id: event.id, type: 'delete' }, success: function (response) { calendar.fullCalendar('removeEvents', event.id); displayMessage("Event Deleted Successfully"); } }); } } }); }); /*Toastr Success Code*/ function displayMessage(message) { toastr.success(message, 'Event'); } </script> </body> </html>Creating Routes
blog\routes\web.php
//blog\routes\web.php <?php use Illuminate\Support\Facades\Route; use App\Http\Controllers\FullCalenderController; //add fullcalendar Controller Route::get('/', function () { return view('welcome'); }); Route::controller(FullCalenderController::class)->group(function(){ Route::get('fullcalender', 'index'); Route::post('fullcalenderAjax', 'ajax'); });Run C:\xampp\htdocs\laravel\blog>php artisan serve
Starting Laravel development server: http://127.0.0.1:8000