How to filter database records using dropdown in Laravel
![](https://blogshub.co.in/wp-content/uploads/2023/01/image-13-1024x468.png)
In this post we will learn how to filter database records using dropdown.
Steps:
Step 1: Install Laravel and Create Application
Step 2: Install Yajra datatable package
Step 3: Config database credentials in .env file
Step 4: Migrate database
Step 5: Create Controller
Step 6: Create blade view file
Step 7: Create Routes
Step 8: Run application
Install Laravel and Create Application: First create new application using below mention composer command.
composer create-project --prefer-dist laravel/laravel filterdata
![](https://blogshub.co.in/wp-content/uploads/2023/01/image-7.png)
Get in application
cd filterdata
Install Yajra datatable package
Now, We have to install Yajra datatable Package, run below mention composer command to install Yajra package.
composer require yajra/laravel-datatables-oracle
![](https://blogshub.co.in/wp-content/uploads/2023/01/image-8.png)
Now config/inject Yajra class inside providers and alias array using config/app.php
'providers' => [
Yajra\DataTables\DataTablesServiceProvider::class,
'aliases' => [
'DataTables' => Yajra\DataTables\Facades\DataTables::class,
Config database credentials in .env file
Now config database credentials and run migrate command
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=filterdata
DB_USERNAME=root
DB_PASSWORD=
For filter data we have to add one column in users table “status” column, create a one migration file for add status column using below artisan command.
php artisan make:migration add_status_column
<?php
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) {
$table->boolean('status')->default(0);
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
//
}
}
Run migrate artisan command for migrate your tables in database
php artisan migrate
![](https://blogshub.co.in/wp-content/uploads/2023/01/image-9.png)
Add some dummy data
We have to add some dummy data for testing filter, we can use seeder,factory and tinker
php artisan tinker
User::factory()->count(350)->create()
![](https://blogshub.co.in/wp-content/uploads/2023/01/image-10.png)
Create Controller:
Now create controller for write our logic inside controller function, using below mention atisan command we can create controller
php artisan make:controller UserController
![](https://blogshub.co.in/wp-content/uploads/2023/01/image-11.png)
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\User;
use DataTables;
class UserController extends Controller
{
public function index(Request $request){
if ($request->ajax()) {
$data = User::select('*');
return Datatables::of($data)
->addIndexColumn()
->addColumn('status', function($row){
if($row->status){
return '<span class="btn btn-outline-success mb-0">Active Users</span>';
}else{
return '<span class="btn btn-outline-danger mb-0">Deactive Users</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%");
});
}
})
->rawColumns(['status'])
->make(true);
}
return view('users');
}
}
Create blade view file
Now create blade view file inside resources/views/users.blade.php
<!DOCTYPE html>
<html>
<head>
<title>Filter Database Records - Blogahub.co.in</title>
<link href="https://cdn.datatables.net/1.12.1/css/dataTables.bootstrap5.min.css" rel="stylesheet">
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/5.1.3/css/bootstrap.min.css" rel="stylesheet">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.js"></script>
<script src="https://cdn.datatables.net/1.12.1/js/jquery.dataTables.min.js"></script>
<script src="https://cdn.datatables.net/1.12.1/js/dataTables.bootstrap5.min.js"></script>
</head>
<body>
<div class="container">
<div class="bg-light p-4 text-center">
<h2 class="text-black m-0">Filter Database Records - Blogahub.co.in</h2>
</div>
<div class="card my-2">
<div class="card-body">
<div class="form-group">
<label><strong>Filter by Status :</strong></label>
<select id='status' class="form-control" >
<option value="">Select Status</option>
<option value="1">Active</option>
<option value="0">Deactive</option>
</select>
</div>
</div>
</div>
<table class="table table-bordered data-table my-2">
<thead>
<tr>
<th>Sr no.</th>
<th>Name</th>
<th>Email</th>
<th>Status</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
<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(),
d.search = $('input[type="search"]').val()
}
},
columns: [
{data: 'id', name: 'id'},
{data: 'name', name: 'name'},
{data: 'email', name: 'email'},
{data: 'status', name: 'status'},
]
});
$('#status').change(function(){
table.draw();
});
});
</script>
</body>
</html>
Create route
Create routes inside web.php for accessing your filter page.
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\UserController;
/*
|--------------------------------------------------------------------------
| 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('users',[UserController::class,'index'])->name('users.index');
Run Application
php artisan serve
http://127.0.0.1:8000/users
![](https://blogshub.co.in/wp-content/uploads/2023/01/image-12-1024x468.png)