Share this:

In today’s digital age, user experience has become a critical aspect of web development. One of the most important elements of user experience is search functionality. Users expect quick and accurate search results, and autocomplete search has become a popular way to provide this. Laravel, a PHP web application framework, is an excellent tool for building robust web applications with a great user experience. In this article, we will explore how to implement an autocomplete search functionality in Laravel 10 using data from a database. We will cover the prerequisites required to run Laravel, installation, and setup of the database, basic understanding of PHP and MySQL, and then dive into the creation of the autocomplete search functionality. This tutorial will provide you with the necessary skills to create a seamless user experience that will help your users quickly find what they are looking for.

The prerequisites for building the autocomplete search functionality in Laravel 10 are:
  • PHP 7.4 or higher and MySQL 5.6 or higher installed
  • Composer package manager installed
  • Laravel installed using Composer
  • Access to a database to store the data for the autocomplete search functionality.

To create the autocomplete search functionality in Laravel 10, we need to follow a few steps.

Step 1: Creating the Route

The first step is to create a route that will handle the autocomplete search request. We can create a new route in the web.php file located in the routes directory.

Route::get('/search', 'SearchController@autocomplete')->name('search.autocomplete');

This route will listen for GET requests on the /search URI and call the autocomplete method of the SearchController class. We will define this method in the next step.

Step 2: Creating the Controller

Next, we need to create the SearchController that will handle the autocomplete search functionality. We can create a new controller using the following command:

php artisan make:controller SearchController

This will create a new controller in the app/Http/Controllers directory. In the autocomplete method of the SearchController, we will retrieve the search term from the request, query the database for matching results, and return the results as JSON data. Here is an example of how we can implement this method:

public function autocomplete(Request $request)
{
    $query = $request->get('term', '');

    $results = DB::table('products')
        ->where('name', 'LIKE', '%'.$query.'%')
        ->orWhere('description', 'LIKE', '%'.$query.'%')
        ->get();

    return response()->json($results);
}

In this example, we are querying the products table for any records where the name or description columns contain the search term. We are using the LIKE operator to perform a partial match search, and we are wrapping the search term with % characters to indicate that we want to match any records that contain the search term. Finally, we are returning the results as JSON data using the response()->json() method.

Step 3: Creating the View

Now that we have the route and controller set up, we need to create the view that will display the autocomplete search results. We can create a new view file called search.blade.php in the resources/views directory. This file will contain the HTML and JavaScript required to display the search results.

Here is an example of what the search.blade.php file might look like:

<div class="form-group">
    <label for="search">Search:</label>
    <input type="text" class="form-control" id="search" name="search" placeholder="Enter search term">
</div>

<script>
$(document).ready(function() {
    $('#search').autocomplete({
        source: "{{ route('search.autocomplete') }}",
        minLength: 2,
        select: function(event, ui) {
            $('#search').val(ui.item.name);
        }
    });
});
</script>

In this example, we have a simple search form that consists of an input field and a label. We are using jQuery to initialize the jQuery UI Autocomplete widget on the input field. We are specifying the source option as the search.autocomplete route that we created in the previous step. We are also specifying a minLength option of 2, which means that the autocomplete search will only be triggered if the user has entered at least 2 characters. Finally, we are defining a select callback function that will be called when the user selects a search result. In this function, we are setting the value of the input field to the name of the selected result.

Step 4: Implementing Autocomplete Search

Finally, we need to implement the autocomplete search functionality using JavaScript. We can use jQuery and the jQuery UI Autocomplete plugin to make this process easier. In the search.blade.php file, we will create a new jQuery UI Autocomplete widget that will make an AJAX request to the search.autocomplete route and display the results in a dropdown.

Here is an example of what the JavaScript code might look like:

$(document).ready(function() {
    $('#search').autocomplete({
        source: "{{ route('search.autocomplete') }}",
        minLength: 2,
        select: function(event, ui) {
            $('#search').val(ui.item.name);
        },
        focus: function(event, ui) {
            event.preventDefault();
            $('#search').val(ui.item.name);
        },
        response: function(event, ui) {
            if (!ui.content.length) {
                var noResult = { value:"", label:"No results found" };
                ui.content.push(noResult);
            }
        }
    });
});

In this example, we are using the autocomplete() method to initialize the jQuery UI Autocomplete widget on the input field with ID search. We are specifying the source option as the search.autocomplete route that we created in the previous step. We are also specifying a minLength option of 2, which means that the autocomplete search will only be triggered if the user has entered at least 2 characters.

The select callback function will be called when the user selects a search result. In this function, we are setting the value of the input field to the name of the selected result.

The focus callback function will be called when the user focuses on a search result. In this function, we are preventing the default behavior (which is to display the label of the selected result in the input field) and instead setting the value of the input field to the name of the selected result.

The response callback function will be called when the server returns the search results. In this function, we are checking if the ui.content array (which contains the search results) is empty. If it is, we are adding a new object to the array with a value of "" (an empty string) and a label of “No results found”. This will ensure that the autocomplete dropdown always contains at least one item, even if there are no search results.

Once we have completed these steps, we will have a working autocomplete search functionality that retrieves data from a database and displays it in real-time to the user.

Conclusion

In conclusion, autocomplete search is a crucial feature for improving the user experience of web applications. Laravel, being a powerful PHP web application framework, provides an excellent toolset for building robust web applications with a great user experience. In this article, we explored how to implement an autocomplete search functionality in Laravel 10 using data from a database.

We first discussed the prerequisites required to run Laravel, installation, and setup of the database, basic understanding of PHP and MySQL. We then went through the process of creating the autocomplete search functionality by creating a route, a controller, and a view. We also implemented the autocomplete search functionality using jQuery and the jQuery UI Autocomplete plugin.

By following this tutorial, you now have the necessary skills to create a seamless user experience that will help your users quickly find what they are looking for. Remember that the key to building a great user experience is to constantly test and iterate on your design, so don’t be afraid to experiment and try new things.

In summary, with the help of Laravel and the right techniques, you can create a highly effective autocomplete search functionality that will improve the usability of your web application and enhance the user experience for your users.

Share this: