Searching user data - crud of users

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' ) );
}

Related Posts


Building mini ecommerce in Laravel

Listing rows of users - crud

Adding user data - crud of users

Editing user data - crud of users

Deleting user data - crud of users

Listing rows of products - crud

Listing rows of profiles - crud

Listing rows of orders - crud

Listing rows of order items - crud