Laravel 7 Full Text Search Tutorial

Laravel 7, 6 full text search app. Here you will learn how to implement full text search in laravel app uisng full text search package.

This tutorial will guide you step by step on how to implement full text search in laravel app using full text search package and bootstrap model. As well as learn how to solve this error “Laravel : Syntax error or access violation: 1055 Error”. Occur full-text search implementation.

This tutorial uses form get method for creating full text search with mysql DB in laravel app. And use php artisan tinker to generate fake records into database table.

Note that, FullText Search in MySQL server lets users run fulltext queries against character-based data in MySQL tables. You must create a fulltext index on the table before you run fulltext queries on a table. The fulltext index can include one or more character-based columns in the table.

A much better and faster way to search into MySql DB table is to use FULLTEXT search instead of using simple Laravel ‘LIKE’ eloquent with query.

This tutorial also work with laravel different version like laravel 5, 5.5, 6, 7.x etc.

Laravel Full Text Search Tutorial From Scratch

Let’s start laravel full-text search implementation in laravel 7, 6 versions:

  • Step 1: Install Laravel New App
  • Step 2: Configuration .evn file
  • Step 3: Run Migration
  • Step 4: Install Full Text Search Package
  • Step 5: Add Fake Records in DB
  • Step 6: Add Routes,
  • Step 7: Create Controller
  • Step 8: Create Blade View
  • Step 9: Start Development Server

Step 1: Install Laravel Fresh Setup

First of all, open your terminal and run the following command to install or download laravel new app for full text search app:

composer create-project --prefer-dist laravel/laravel blog

Step 2: Configuration .env file

In this step, navigate to the project root directory. And open .env file. Then add the database details as the following picture:

laravel datatables
configuration.evn

Step 3: Run Migration

In this step, run the migration command to migrate tables into the database:

php artisan migrate

Step 4: Install Full Text Package

Now, open your terminal again, and run the following command to install full text search package in laravel app:

composer require nicolaslopezj/searchable

Step 5: Add Fake Records in DB

In this step, run the following command on terminal to add fake records into database table:

php artisan tinker

After running the php artisan tinker. Run the following command. It will add 150 fake records in your database:

>>> factory(App\User::class, 150)->create();

Step 6: Create Routes

In this step, navigate to laravel app routes directory and open web.php file. Then add the following routes into web.php file:

Route::get('full-text-search', 'FullTextSearchController@index');

Step 7: Create Controller

Now, open your terminal again, and run the following command to create a controller:

php artisan make:controller FullTextSearchController

Then navigate to app/Http/Controllers directory and open FullTextSearchController.php file. And add the following code into FullTextSearchController.php file:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\User;

class FullTextSearchController extends Controller
{
    public function index(Request $request)
    {
    	if($request->has('term')){
    		$data['lists'] = User::search($request->get('term'))->get();
    	}else{
    		$data['lists'] = User::get();
    	}
        return view('full-text-search', $data);
    }
}

Step 8: Create Blade View

In this step, navigate to resources/views/ directory and create one blade view file named full-text-search.blade.php file. Then add the following code into your full-text-search.blade.php file:

<!DOCTYPE html>
<html>
<head>

    <meta charset="utf-8">
    <title>Laravel 7, 6, 5 Full Text Search Tutorial</title>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">
    </head>

   <body>
    <div class="container mt-5">
        <div class="card">
		  <div class="card-header">
		    <h1>Laravel 7/6 Full Text Search Tutorial From Scratch</h1>
		  </div>
		  <div class="card-body">
		            <form method="GET" action="{{ url('full-text-search') }}">
		            <div class="row">
		                <div class="col-md-6">
		                    <input type="text" name="term" class="form-control" placeholder="Search">
		                </div>
		                <div class="col-md-6">
		                    <button class="btn btn-primary">Search</button>
		                </div>
		            </div>
		        </form>
			   <br/>
		       <table class="table table-bordered">
		            <tr>
		                <th>Id</th>
		                <th>Name</th>
		                <th>Email</th>
		            </tr>
		            @if($lists)
		                @foreach($lists as $list)
		                <tr>
		                    <td>{{ $list->id }}</td>
		                    <td>{{ $list->name }}</td>
		                    <td>{{ $list->email }}</td>
		                </tr>
		                @endforeach
		            @else
		            <tr>
		                <td colspan="3" class="text-danger">Result not found.</td>
		            </tr>
		            @endif
		      </table>
		  </div>
		</div>
    </div>
</body>
</html>

Step 9: Start Development Server

In this step, open your terminal and run php artisan serve command to start your laravel full text search app locally:

php artisan serve

If you want to run the project diffrent port so use this below command

php artisan serve --port=8080

Now you are ready to run this laravel full text search app. So open your browser and hit the following url on it:

http://localhost:8000/full-text-search

OR

http://localhost/blog/public/full-text-search

Conclusion

Laravel full text search tutorial, here you have learned from scratch how to implement full text search in laravel app.

Note that, if you found this following error in laravel full text search app:

SQLSTATE[42000]: Syntax error or access violation: 1055 ‘fulltextsearch.users.name’ isn’t in GROUP BY (SQL: select * from (select users.*, max((case when LOWER(users.name) LIKE tr then 150 else 0 end) + (case when LOWER(users.name) LIKE tr% then 50 else 0 end) + (case when LOWER(users.name) LIKE %tr% then 10 else 0 end) + (case when LOWER(users.email) LIKE tr then 75 else 0 end) + (case when LOWER(users.email) LIKE tr% then 25 else 0 end) + (case when LOWER(users.email) LIKE %tr% then 5 else 0 end)) as relevance from users group by users.id having relevance >= 3.75 order by relevance desc) as users)

Solution of Above Error: Navigate to config directory and open database.php file. Then change strict => false to disable MySQL’s strict mode.

Recommended Laravel Tutorials

If you have any questions or thoughts to share, use the comment form below to reach us.

AuthorDevendra Dode

Greetings, I'm Devendra Dode, a full-stack developer, entrepreneur, and the proud owner of Tutsmake.com. My passion lies in crafting informative tutorials and offering valuable tips to assist fellow developers on their coding journey. Within my content, I cover a spectrum of technologies, including PHP, Python, JavaScript, jQuery, Laravel, Livewire, CodeIgniter, Node.js, Express.js, Vue.js, Angular.js, React.js, MySQL, MongoDB, REST APIs, Windows, XAMPP, Linux, Ubuntu, Amazon AWS, Composer, SEO, WordPress, SSL, and Bootstrap. Whether you're starting out or looking for advanced examples, I provide step-by-step guides and practical demonstrations to make your learning experience seamless. Let's explore the diverse realms of coding together.

Leave a Reply

Your email address will not be published. Required fields are marked *