Step 01: Adding search form just above table element in list.blade.php under resources/view/users
<div class="row"> <div class="col-md-4"> <h2 class="">All Users</h2> </div> <div class="col-md-4"> <div class=""> <form method="GET" action="{{ route('users.index' ) }}"> <input type="text" name="search_global" class="form-control" placeholder="Filter by any (id, name, email or role)"> </form> </div> </div> <div class="col-md-4 text-end pt-1"> <a class="btn btn-sm btn-primary" href="{{ route('users.create') }}"> Add User</a> </div> </div>
Step 02: Then, Optimizing code in resources/view/users/list.blade.php
// adding base url with data element for passing it to JS <tr> <td>{{$user->id}}td> <td class="text-center">{!! $user->role_id == 1 ? '<span class="badge bg-success">Adminspan>':'<span class="badge bg-danger">Customerspan>' !!}td> <td class="text-center">{{ $user->name }}td> <td class="">{{ $user->email }}td> <td class="text-center">{{ $user->created_at->format('M d, Y') }}td> <td class="text-center"><a class="text-black" href="{{ route('users.edit', $user->id) }}"><i class="bi bi-pencil">i>a> <a class="text-black delete-row" href="javascript:void(0);" data-base-url=" echo url('') ?>" data-rowname=" echo $user->name ?>" data-rowid=" echo $user->id ?>"><i class="bi bi-trash">i>a>td> tr>
// removing action value and keeping it empty inside bootstrap model delete confirm <div id="modal-delete-confirm" class="modal fade"> <div class="modal-dialog modal-md modal-dialog-centered" > <div class="modal-content"> <div class="modal-header"> <h4><strong >Confirm Delete</strong></h4> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-hidden="true"></button> </div> <div class="modal-body text-center"> <p>Would you like to delete this row <span id="modal-delete-title"></span>? <br>Once deleted it cannot be reverted.</p> <div class="row justify-content-center"> <div class="col-3"> <form id="list-frm-modal" class="float-start" method="POST" action=""> @csrf @method('DELETE') <button type="submit" class="btn btn-sm btn-danger white">Yes</button> </form> <a href="javascript:void(0);" class="btn btn-sm btn-info white float-end" data-bs-dismiss="modal">No</a> </div> </div> </div> </div> </div> </div>
Step 03: Changing code inside modal.js under resources/js/users folder
// adding baseUrl for action attribute of the form fetching value from blade file on delete click event $('#list-frm-modal').attr('action', $(this).data('baseUrl') + '/users/' + $(this).data('rowid'));
Step 04: Changing index() method in UserController.php adding eloquent search query based of received keyword
// at the top use Illuminate\Support\Facades\DB; public function index( Request $request ) { $meta_title = 'All Users'; //DB::enableQueryLog(); // enabling query log for eloquent ORM $query = User::query(); $keyword = $request->query( 'search_global' ) ?? ''; // eloquent conditional clause $query->when( $keyword , function ($query) use ($keyword) { $query->where(function($q) use ($keyword) { $q->where( 'name', 'like' , '%'.$keyword.'%' )->orWhere('email', 'like', '%'.$keyword.'%')->orWhere('id',$keyword); $roles = array_map('strtolower', config('globalvar.App.role')); // converting array values to lowercase if( in_array($keyword,$roles) ) { //interchanging array between keys and values.. so key becomes values and vice versa $roleId = array_flip($roles)[$keyword]; $q->orWhere('role_id', $roleId); } }); }); if ( !empty( $keyword ) ) { $meta_title = 'Searching with: "' . $keyword; } $users = $query->orderBy( 'id', 'desc' )->paginate( 10 )->withQueryString(); //dd(DB::getQueryLog()); //dd($users); return view( 'users.list', compact( 'meta_title','users' ) ); }