Search In Laravel 5

Last Updated at : July 18, 2017 By - Azeem Hassni | 1949


    Search is the most tricky part in every application while everyone wants a quick and effective search engine for their application. Let’s see how we can make this process easy and scalable in a Laravel application. We will use a package called TNTSearch which is a full-text search engine written in PHP.

    Installing TNT Search

    Since we’ve composer as industry standard so installing packages is not a problem. just add the following line in your composer.json file

      "require" : {
          "teamtnt/tntsearch": "0.6.*"

    or simply run the following command right from your terminal.

    $ composer require teamtnt/tntsearch

    it will pick appropriate version for you.

    Now open up config/app.php and register the following service provider and create an alias for the namespaced facade.

    Service Provider



    'TNTSearch' => TeamTNT\TNTSearch\Facades\TNTSearch::class,

    Now that the installation part is done, let’s dive into the cool stuff.


    Let’s say we’ve a products table with Title, Description and Price fields, we will create an artisan command to perform our indexing operations.

    Open a terminal window and execute the following command to generate ProductIndexer class.

    $ php artisan make:console ProductIndexer

    Locate the file at app/Console/Commands/ProductIndexer.php and set handle method like this

    namespace App\Console\Commands;
    use Illuminate\Console\Command;
    use TeamTNT\TNTSearch\Facades\TNTSearch;
    class ProductIndexer extends Command
         * The name and signature of the console command.
         * @var string
        protected $signature = 'index:products';
         * The console command description.
         * @var string
        protected $description = 'Index the Products';
         * Create a new command instance.
        public function __construct()
         * Execute the console command.
         * @return mixed
        public function handle()
            $indexer = TNTSearch::createIndex('products.index');
            $indexer->query("SELECT id, title, description, price FROM products");

    Cool! Now Register the command with Laravel by appending the following line into the $commands array in app/Console/Kernal.php


    Our indexing part is almost done, we can index our products any time by running the following artisan command

    $ php artisan index:products

    You can find the newly generated index file atstorage/products.index

    Performing a Search

    Let’s setup a search form real quick with routes and controller actions

    # Displays our search form
    Route::get('products', 'ProductsController@index');
    # Displays our search results
    Route::get('products/search', 'ProductsController@search');

    From PrdouctController@index we’ll simply return a view which renders our search form and we’ll submit that form to ProductsController@search

    Let’s see how to tackle the search part,

    namespace App\Http\Controllers;
    use App\Http\Requests;
    use App\Product;
    use Illuminate\Http\Request;
    use TeamTNT\TNTSearch\Facades\TNTSearch;
    class ProductsController extends Controller
        public function search( Request $request )
            $results = TNTSearch::search($request->get('query'), 1000);
            $products = Product::whereIn('id', $results[ 'ids' ])->get();
            return view('search.results', compact('products'));

    We’re almost done, now our site has a basic but powerful search engine.

    List of all products

    Search Results

    I’ll share an other part of this article to discuss re-indexing and moving the indexing jargon to background using Laravel’s scheduler.


    Follow me on Twitter || Read this on Medium

    blog user
    Azeem Hassni

    I write code and i love it. I do write blogs on things which I am passionate about. I love to Explore the internet of things and whats new in web technologies. My topic of Interests include WordPress, Laravel & Magento to name a few.

    Related Posts

    Laravel Live Islamabad, ended on 24th Nov'18 & we got a lot to learn from the top-notch of speakers & influencers. Thanks to the sponsors for pulling off such a great event in the capital of Pakistan.

    Previously Localization in Laravel was done by creating separate directories for each locales and place in under resources/lang/ and add key value pairs to every single keyword in a number of files as per their modules.

    Another #LaraconUS in the books & It was the 6th instalment of #LaraconUS happened at Chicago with full swing & we got a lot to learn this time with exceptional line of speakers and never-ending community support by fellow Artisans

    Laravel is one of a famous and widely used PHP framework which is growing with immense pace since its version 4.2. Learning Laravel & Setting up your application locally is not much of a difficult task but when it comes to deployment, developers often find it a bit tricky to handle.