Download Laravel App
composer create-project --prefer-dist laravel/laravel my-app
C:\xampp\htdocs\laravel10project>composer create-project laravel/laravel laravel10project
Connecting our Database
open .env file root directory.
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laraveldb
DB_USERNAME=root
DB_PASSWORD=
Create Model and Migration
C:\xampp\htdocs\laravel\laravelproject>php artisan make:model Employee -m
A new file named Employee.php will be created in the app directory and database/migrations directory to generate the table in our database
app/Models/Employee.php
//app/Models/Employee.php <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Employee extends Model { use HasFactory; protected $fillable = [ 'name', 'email', 'address' ]; }database\migrations\create_employees_table.php
//database\migrations\create_employees_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. */ public function up(): void { Schema::create('employees', function (Blueprint $table) { $table->id(); $table->string('name'); $table->string('email'); $table->string('address'); $table->timestamps(); }); } /** * Reverse the migrations. */ public function down(): void { Schema::dropIfExists('employees'); } };Database Migration
php artisan migrate
C:\xampp\htdocs\laravel\laravel10project>php artisan migrate
Migration table created successfully.
check database table
Install Yajra Datatables
https://yajrabox.com/docs/laravel-datatables/master/installation
C:\xampp\htdocs\laravel\laravel10project>composer require yajra/laravel-datatables-oracle
And add the following service providers into app.php file
config/app.php
'providers' => [
Yajra\Datatables\DatatablesServiceProvider::class,
],
'aliases' => [
'Datatables' => Yajra\Datatables\Facades\Datatables::class,
]
Then publish Laravel dataTables vendor package by using the following command:
C:\xampp\htdocs\laravel\laravel10project>php artisan vendor:publish
Create Controller
php artisan make:controller EmployeeController
C:\xampp\htdocs\laravel\my-app>php artisan make:controller EmployeeController
app/Http/Controllers/EmployeeController.php
//app/Http/Controllers/EmployeeController.php <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\Employee; use Datatables; class EmployeeController extends Controller { public function index() { if(request()->ajax()) { return datatables()->of(Employee::select('*')) ->addColumn('action', 'employee-action') ->rawColumns(['action']) ->addIndexColumn() ->make(true); } return view('index'); } public function store(Request $request) { $employeeId = $request->id; $employee = Employee::updateOrCreate( [ 'id' => $employeeId ], [ 'name' => $request->name, 'email' => $request->email, 'address' => $request->address ]); return Response()->json($employee); } public function edit(Request $request) { $where = array('id' => $request->id); $employee = Employee::where($where)->first(); return Response()->json($employee); } public function destroy(Request $request) { $employee = Employee::where('id',$request->id)->delete(); return Response()->json($employee); } }View Blade
Bootstrap 5
https://getbootstrap.com/docs/5.0/getting-started/introduction/
https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css
Jquery
https://jquery.com/download/
CDN : jsDelivr CDN
https://www.jsdelivr.com/package/npm/jquery
Datatables
DataTables is a plug-in for the jQuery Javascript library. It is a highly flexible tool, built upon the foundations of progressive enhancement, that adds all of these advanced features to any HTML table.
https://datatables.net/
resources/views/index.blade.php
//resources/views/index.blade.php <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Laravel 10 Ajax DataTables CRUD (Create Read Update and Delete) - Cairocoders</title> <meta name="csrf-token" content="{{ csrf_token() }}"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" > <script src="https://cdn.jsdelivr.net/npm/jquery@3.7.0/dist/jquery.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.min.js"></script> <link href="https://cdn.datatables.net/1.13.4/css/jquery.dataTables.min.css" rel="stylesheet"> <script src="https://cdn.datatables.net/1.13.4/js/jquery.dataTables.min.js"></script> </head> <body> <div class="container mt-2"> <div class="row"> <div class="col-lg-12 margin-tb"> <div class="pull-left"> <h2>Laravel 10 Ajax DataTables CRUD (Create Read Update and Delete) </h2> </div> <div class="pull-right mb-2"> <a class="btn btn-success" onClick="add()" href="javascript:void(0)"> Create Employee</a> </div> </div> </div> @if ($message = Session::get('success')) <div class="alert alert-success"> <p>{{ $message }}</p> </div> @endif <div class="card-body"> <table class="table table-bordered" id="ajax-crud-datatable"> <thead> <tr> <th>Id</th> <th>Name</th> <th>Email</th> <th>Address</th> <th>Created at</th> <th>Action</th> </tr> </thead> </table> </div> </div> <!-- boostrap employee model --> <div class="modal fade" id="employee-modal" aria-hidden="true"> <div class="modal-dialog modal-lg"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title">Employee</h5> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> </div> <div class="modal-body"> <form action="javascript:void(0)" id="EmployeeForm" name="EmployeeForm" class="form-horizontal" method="POST" enctype="multipart/form-data"> <input type="hidden" name="id" id="id"> <div class="form-group"> <label for="name" class="col-sm-2 control-label">Name</label> <div class="col-sm-12"> <input type="text" class="form-control" id="name" name="name" placeholder="Enter Name" maxlength="50" required=""> </div> </div> <div class="form-group"> <label for="name" class="col-sm-2 control-label">Email</label> <div class="col-sm-12"> <input type="email" class="form-control" id="email" name="email" placeholder="Enter Email" maxlength="50" required=""> </div> </div> <div class="form-group"> <label class="col-sm-2 control-label">Address</label> <div class="col-sm-12"> <input type="text" class="form-control" id="address" name="address" placeholder="Enter Address" required=""> </div> </div> <div class="col-sm-offset-2 col-sm-10"><br/> <button type="submit" class="btn btn-primary" id="btn-save">Save changes</button> </div> </form> </div> <div class="modal-footer"></div> </div> </div> </div> <!-- end bootstrap model --> <script type="text/javascript"> $(document).ready( function () { $.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') } }); $('#ajax-crud-datatable').DataTable({ processing: true, serverSide: true, ajax: "{{ url('ajax-crud-datatable') }}", columns: [ { data: 'id', name: 'id' }, { data: 'name', name: 'name' }, { data: 'email', name: 'email' }, { data: 'address', name: 'address' }, { data: 'created_at', name: 'created_at' }, { data: 'action', name: 'action', orderable: false}, ], order: [[0, 'desc']] }); }); function add(){ $('#EmployeeForm').trigger("reset"); $('#EmployeeModal').html("Add Employee"); $('#employee-modal').modal('show'); $('#id').val(''); } function editFunc(id){ $.ajax({ type:"POST", url: "{{ url('edit') }}", data: { id: id }, dataType: 'json', success: function(res){ $('#EmployeeModal').html("Edit Employee"); $('#employee-modal').modal('show'); $('#id').val(res.id); $('#name').val(res.name); $('#address').val(res.address); $('#email').val(res.email); } }); } function deleteFunc(id){ if (confirm("Delete Record?") == true) { var id = id; // ajax $.ajax({ type:"POST", url: "{{ url('delete') }}", data: { id: id }, dataType: 'json', success: function(res){ var oTable = $('#ajax-crud-datatable').dataTable(); oTable.fnDraw(false); } }); } } $('#EmployeeForm').submit(function(e) { e.preventDefault(); var formData = new FormData(this); $.ajax({ type:'POST', url: "{{ url('store')}}", data: formData, cache:false, contentType: false, processData: false, success: (data) => { $("#employee-modal").modal('hide'); var oTable = $('#ajax-crud-datatable').dataTable(); oTable.fnDraw(false); $("#btn-save").html('Submit'); $("#btn-save"). attr("disabled", false); }, error: function(data){ console.log(data); } }); }); </script> </body> </html>resources/views/employee-action.blade.php
//resources/views/employee-action.blade.php <a href="javascript:void(0)" data-toggle="tooltip" onClick="editFunc({{ $id }})" data-original-title="Edit" class="edit btn btn-success edit"> Edit </a> <a href="javascript:void(0);" id="delete-compnay" onClick="deleteFunc({{ $id }})" data-toggle="tooltip" data-original-title="Delete" class="delete btn btn-danger"> Delete </a>Routes
routes/web.php
//routes/web.php <?php use Illuminate\Support\Facades\Route; use App\Http\Controllers\EmployeeController; Route::get('/', function () { return view('welcome'); }); Route::get('ajax-crud-datatable', [EmployeeController::class, 'index']); Route::post('store', [EmployeeController::class, 'store']); Route::post('edit', [EmployeeController::class, 'edit']); Route::post('delete', [EmployeeController::class, 'destroy']);Run C:\xampp\htdocs\laravel\my-app>php artisan serve
Starting Laravel development server: http://127.0.0.1:8000