Laravel with Packages | Laravel Datatables Filter with Dropdown Example

Now, let’s see an example of a laravel datatables filter dropdown example. We will use laravel datatables custom filter with dropdown. I would like to show you the laravel datatables dropdown filter example. it’s a simple example of a datatables dropdown filter with laravel. You just need to do some steps to do the yajra datatable dropdown filter with laravel.

you can easily add a dropdown filter with yajra datatables in laravel 6, laravel 7, laravel 8, and laravel 9.

In this tutorial, I will show you how to add a custom filter with a dropdown with laravel yajra datatable. we will add a status column in the users table and we will display the status “Active” and “Deactive” in-out table. add a dropdown with active and deactivate at the top so you can select and filter it.

So let’s follow this tutorial and you will get the layout as like below:


In this step, if you haven’t laravel application setup then we have to get a fresh laravel 7 application. So run the bellow command and get a clean fresh laravel 7 application.

composer create-project --prefer-dist laravel/laravel blog

We need to install yajra datatable composer package for datatable so that you can install using the following command:

composer require yajra/laravel-datatables-oracle

After that, you need to set providers and alias.


.....'providers' => [....Yajra\DataTables\DataTablesServiceProvider::class,]'aliases' => [....'DataTables' => Yajra\DataTables\Facades\DataTables::class,].....

Here, we need to create a migration for adding a status column, so let’s run the bellow command to create a migration:

php artisan make:migration add_status_column



use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class AddStatusColumn extends Migration
* Run the migrations.
* @return void
public function up()
Schema::table('users', function (Blueprint $table) {

* Reverse the migrations.
* @return void
public function down()


Now we can run our migration:

php artisan migrate

Step 4: Add Dummy Records

In this step, we will create some dummy users using the tinker factory. so let’s create dummy records using below command:

php artisan tinkerfactory(App\User::class, 200)->create();

In this step we need to create a route for datatables layout file and another one for getting data. so open your routes/web.php file and add the following route.


Route::get('users', ['uses'=>'UserController@index', 'as'=>'users.index']);

At this point, now we should create a new controller as UserController. this controller will manage the layout and getting data request and return response, so put the below content in the controller file:



namespace App\Http\Controllers;

use App\User;
use Illuminate\Http\Request;
use DataTables;

class UserController extends Controller
* Display a listing of the resource.
* @return \Illuminate\Http\Response
public function index(Request $request)
if ($request->ajax()) {
$data = User::select('*');
return Datatables::of($data)
->addColumn('status', function($row){
return '<span class="badge badge-primary">Active</span>';
return '<span class="badge badge-danger">Deactive</span>';
->filter(function ($instance) use ($request) {
if ($request->get('status') == '0' || $request->get('status') == '1') {
$instance->where('status', $request->get('status'));
if (!empty($request->get('search'))) {
$instance->where(function($w) use($request){
$search = $request->get('search');
$w->orWhere('name', 'LIKE', "%$search%")
->orWhere('email', 'LIKE', "%$search%");

return view('users');

In the Last step, let’s create users.blade.php(resources/views/users.blade.php) for layout and we will write design code here and put the following code:


<!DOCTYPE html>
<title>Laravel Datatables Filter with Dropdown Example - raviyatechnical</title>
<meta name="csrf-token" content="{{ csrf_token() }}">
<link rel="stylesheet" href="" />
<link href="" rel="stylesheet">
<link href="" rel="stylesheet">
<script src=""></script>
<script src=""></script>
<script src=""></script>
<script src=""></script>
<script src=""></script>

<div class="container">
<h1>Laravel Datatables Filter with Dropdown Example - raviyatechnical</h1>

<div class="card">
<div class="card-body">
<div class="form-group">
<label><strong>Status :</strong></label>
<select id='status' class="form-control" style="width: 200px">
<option value="">--Select Status--</option>
<option value="1">Active</option>
<option value="0">Deactive</option>

<table class="table table-bordered data-table">
<th width="100px">Status</th>


<script type="text/javascript">
$(function () {

var table = $('.data-table').DataTable({
processing: true,
serverSide: true,
ajax: {
url: "{{ route('users.index') }}",
data: function (d) {
d.status = $('#status').val(), = $('input[type="search"]').val()
columns: [
{data: 'id', name: 'id'},
{data: 'name', name: 'name'},
{data: 'email', name: 'email'},
{data: 'status', name: 'status'},



Now we are ready to run our example so run the bellow command or a quick run:

php artisan serve

Now you can open bellow URL on your browser:


I hope it can help you...



Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store