Laravel 9 Scout Search with Database Driver Example

Mar 04, 2022 . Admin


Hi friends,

In this tutorial,i will tell Laravel 9 Scout Search with Database Driver Example. i will show the example of laravel 9 scout full text search. you can see laravel 9 scout search example. it can this example full explain scout full text search in laravel 9. Here you will learn how to add full text search in laravel 9 scout. you will learn laravel 9 scout elasticsearch example.

Let us know more about Laravel Scout, and it’s a powerful driver-based eloquent package that helps you develop super-fast fast-text search combining with your laravel models.

In this Laravel 9 Scout example, we will tell you how to process every ingredient to form the quick, responsive, and agile full-text search in laravel 9.

Here the following steps example laravel 9 full text search Using scout.

Step 1: Download Laravel

Let us begin the tutorial by installing a new laravel application. if you have already created the project, then skip following step.

composer create-project laravel/laravel example-app
Step 2: Install Scout

In this step we have to install scout package and we will publish them:

composer require laravel/scout

Next, we have to publish our configuration file. so you need to run bellow command:

php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"

Now we need to set configuration database as driver in your env file:

.env
SCOUT_DRIVER=database
Step 3: Update User Model

Here, we already have users table created, so we need use "Searchable" and create toSearchableArray() method. so let's update following code:

app/Models/User.php
<?php

namespace App\Models;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;
use Laravel\Scout\Searchable;

class User extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable, Searchable;


    /**
     * The attributes that are mass assignable.
     *
     * @var string[]
     */
    protected $fillable = [
        'name',
        'email',
        'password',
    ];

    /**
     * The attributes that should be hidden for serialization.
     *
     * @var array
     */
    protected $hidden = [
        'password',
        'remember_token',
    ];

    /**
     * The attributes that should be cast.
     *
     * @var array
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];

    /**
     * Get the indexable data array for the model.
     *
     * @return array
     */
    public function toSearchableArray()
    {
        return [
            'name' => $this->name,
            'email' => $this->email
        ];
    }
}

Next, we will create some dummy records on users table and import it.

so let's run following commands:

Create Dummy Records:

php artisan tinker
  
User::factory()->count(20)->create()
Import Records:
php artisan scout:import "App\Models\User"
Step 4: Create UserController Controller

In this point, now we should create a new controller as UserController. In this controller, we will add index method, that will return users with filter.

Let's update following code to your controller file:

app/Http/Controllers/UserController.php
<?php

namespace App\Http\Controllers;

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

class UserController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request)
    {
        if($request->filled('search')){
            $users = User::search($request->search)->get();
        }else{
            $users = User::get()->take('5');
        }
          
        return view('users', compact('users'));
    }
}
Step 5: Creat Route

In this is step we need to create route for listing users. so open your "routes/web.php" file and add following route.

routes/web.php
<?php
  
use Illuminate\Support\Facades\Route;
  
use App\Http\Controllers\UserController;
  
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
  
Route::get('users', [UserController::class, 'index']);
Step 6: Create View

In Last step, let's create users.blade.php(resources/views/users.blade.php) for layout and we will write design code here and put following code:

resources/views/users.blade.php
<!DOCTYPE html>
<html>
<head>
    <title>Laravel 9 Scout Search with Database Driver Example - Mywebtuts.com</title>
    <link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/5.0.1/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
      
<div class="container">

    <h3 class="mt-5 mb-5 text-center">Laravel 9 Scout Search with Database Driver Example - Mywebtuts.com</h3>
  
    <form method="GET" class="mb-5">
        <div class="input-group mb-3">
            <input 
                type="text" 
                name="search" 
                value="{{ request()->get('search') }}" 
                class="form-control" 
                placeholder="Search..." 
                aria-label="Search" 
                aria-describedby="button-addon2">
            <button class="btn btn-primary" type="submit" id="button-addon2">Search</button>
        </div>
    </form>
  
    <table class="table table-bordered data-table">
        <thead>
            <tr>
                <th>ID</th>
                <th>Name</th>
                <th>Email</th>
            </tr>
        </thead>
        <tbody>
            @foreach($users as $user)
                <tr>
                    <td>{{ $user->id }}</td>
                    <td>{{ $user->name }}</td>
                    <td>{{ $user->email }}</td>
                </tr>
            @endforeach
        </tbody>
    </table>
</div>
    
</body>
    
</html>
Run Laravel App:

All steps have been done, now you have to type the given command and hit enter to run the laravel app:

php artisan serve

Now, you have to open web browser, type the given URL and view the app output:

http://localhost:8000/users
Output:

I hope it can help you...

#Laravel 9