This Laravel 8 tutorial help to implement yajra datatble with laravel8. Yajra is an awesome grid plugin for laravel which is based on jquery datatable. It’s easy to integrate with laravel compared to datatable.
DataTables is a jQuery JavaScript library plug-in. It’s a powerful tool that adds all of these advanced features to any HTML table, thanks to its progressive enhancement basis.
yajra is a jQuery DataTables API for Laravel 6/7/8. This plugin handles server-side works of DataTables jQuery plugin through AJAX option by considering the Eloquent ORM, Fluent Query Builder or Collection.
The main features of Yajra Datatable:
If you are more comfortable in watching a video that explains How To Integrate Yajra Datatables With Laravel 8, then you should watch this video tutorial.
This Laravel 8 datatables tutorial helps us with the necessary methods for creating and displaying yajra datatables in Laravel 8. We’ll create employee module listing, sorting, searching with pagination.
Let’s create a laravel app using composer
composer create-project laravel/laravel laravel-app --prefer-dist
move to the laravel-app:
cd laravel-app
The following command helps you install the Yajra DataTable plugin in Laravel.
composer require yajra/laravel-datatables:^1.5
if you are working laravel below to 5.5 then you need to add service provider in providers and alias inside the config/app.php
file.
..... ..... 'providers' => [ .... .... Yajra\DataTables\DataTablesServiceProvider::class, ] 'aliases' => [ .... .... 'DataTables' => Yajra\DataTables\Facades\DataTables::class, ]
Now, we’ll run the below command to create a model, and it holds the schema of the database table.
php artisan make:model Employee -m
Open database/migrations/timestamp_create_employees_table.php
file and add the given below code.
<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreateEmployeesTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('employees', function (Blueprint $table) { $table->id(); $table->string('name'); $table->integer('age'); $table->integer('salary'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('employees'); } }
Let’s Open app/Models/Employee.php
and updated the $fillable
array.
<?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Employee extends Model { use HasFactory; protected $fillable = [ 'name', 'age', 'salary' ]; }
Run migration using the following command.
php artisan migrate
I am inserting data manually using sql script.
INSERT INTO `employees` (`id`, `name`, `salary`, `age`) VALUES (1, 'Tiger Nixon', 320800, 61), (2, 'Garrett Winters', 170750, 63), (3, 'Ashton Cox', 86000, 66), (4, 'Cedric Kelly', 433060, 22), (5, 'Airi Satou', 162700, 33), (6, 'Brielle Williamson', 372000, 61), (7, 'Herrod Chandler', 137500, 59), (8, 'Rhona Davidson', 327900, 55), (9, 'Colleen Hurst', 205500, 39), (10, 'Sonya Frost', 103600, 23), (11, 'Jena Gaines', 90560, 30);
Create an EmpController that contains the fundamental functionality for handling data fetching and display requests from the database.
Create a controller using the below command.
php artisan make:controller EmpController
Open app/Http/Controllers/EmpController.php
file and add the following code.
<?php namespace App\Http\Controllers; use App\Models\Employee; use Illuminate\Http\Request; use DataTables; class EmpController extends Controller { // public function index() { return view('listing'); } public function getEmployees(Request $request) { if ($request->ajax()) { $data = Employee::latest()->get(); return Datatables::of($data) ->addIndexColumn() ->addColumn('action', function($row){ $actionBtn = '<a href="javascript:void(0)" class="edit btn btn-success btn-sm">Edit</a> <a href="javascript:void(0)" class="delete btn btn-danger btn-sm">Delete</a>'; return $actionBtn; }) ->rawColumns(['action']) ->make(true); } } }
You need to create a route and display datatables template in the view for our laravel application.
Open routes/web.php
and add the given code.
<?php use Illuminate\Support\Facades\Route; use App\Http\Controllers\EmpController; /* |-------------------------------------------------------------------------- | Web Routes |-------------------------------------------------------------------------- | | Here is where you can register web routes for your application. These | routes are loaded by the RouteServiceProvider within a group which | contains the "web" middleware group. Now create something great! | */ Route::get('/', function () { return view('welcome'); }); Route::get('employee', [EmpController::class, 'index']); Route::get('emp/listing', [EmpController::class, 'getEmployees'])->name('emp.listing');
We’ll create a view and display listing data using a blade template.
Open resources/views/listing.blade.php
file and place the following code.
<!DOCTYPE html> <html> <head> <title>Laravel 8|7 Datatables Tutorial</title> <meta name="csrf-token" content="{{ csrf_token() }}"> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css"/> <link href="https://cdn.datatables.net/1.10.21/css/jquery.dataTables.min.css" rel="stylesheet"> <link href="https://cdn.datatables.net/1.10.21/css/dataTables.bootstrap4.min.css" rel="stylesheet"> </head> <body> <div class="container mt-5"> <h2 class="mb-4">Laravel Yajra Datatables Example</h2> <table class="table table-bordered yajra-datatable"> <thead> <tr> <th>No</th> <th>Name</th> <th>Age</th> <th>Salary</th> <th>Action</th> </tr> </thead> <tbody> </tbody> </table> </div> </body> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.0/jquery.validate.js"></script> <script src="https://cdn.datatables.net/1.10.21/js/jquery.dataTables.min.js"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"></script> <script src="https://cdn.datatables.net/1.10.21/js/dataTables.bootstrap4.min.js"></script> <script type="text/javascript"> $(function () { var table = $('.yajra-datatable').DataTable({ processing: true, serverSide: true, ajax: "{{ route('emp.listing') }}", columns: [ {data: 'DT_RowIndex', name: 'DT_RowIndex'}, {data: 'name', name: 'name'}, {data: 'age', name: 'age'}, {data: 'salary', name: 'salary'}, { data: 'action', name: 'action', orderable: true, searchable: true }, ] }); }); </script> </html>
The DataTable()
method is defined, and the AJAX request is fetching the data from the server and displays the name, age, and salary with the help of Yajra DataTable package.
We’ve also set the orderable and searchable properties to true, so you can easily search the data and write your program.
Run the following command and check on the browser.
php artisan serve
Open the below URL into the browser and check data:
http://127.0.0.1:8000/employee
This tutorial helps integrate a PHP SDK with Laravel. We'll install aws-php-sdk into laravel application and access all aws services… Read More
in this quick PHP tutorial, We'll discuss php_eol with examples. PHP_EOL is a predefined constant in PHP and represents an… Read More
This Laravel tutorial helps to understand table Relationships using Elequonte ORM. We'll explore laravel table Relationships usage and best practices… Read More
We'll explore different join methods of Laravel eloquent with examples. The join helps to fetch the data from multiple database… Read More
in this Laravel tutorial, We'll explore valet, which is a development environment for macOS minimalists. It's a lightweight Laravel development… Read More
I'll go through how to use soft delete in Laravel 10 in this post. The soft deletes are a method… Read More
View Comments
greate post
Hi
i am getting Datatables is undefined even though use Datatables is defined in the controller
return Datatables::of($data)
have you installed yajra table