Здесь мы увидим, как реализовать функцию поиска в Laravel. мы будем искать данные в базе данных и отображать результаты поиска в таблице.

Форма поиска:

Во-первых, давайте создадим форму для поля поиска,

<form action="/search" method="POST" role="search">
    {{ csrf_field() }}
    <div class="input-group">
        <input type="text" class="form-control" name="q"
            placeholder="Search users"> <span class="input-group-btn">
            <button type="submit" class="btn btn-default">
                <span class="glyphicon glyphicon-search"></span>
            </button>
        </span>
    </div>
</form>

Действие поиска:

При нажатии кнопки поиска происходит переход к поиску маршрута, в котором присутствует логика выборки данных из базы данных,

Route::any('/search',function(){
    $q = Input::get ( 'q' );
    $user = User::where('name','LIKE','%'.$q.'%')->orWhere('email','LIKE','%'.$q.'%')->get();
    if(count($user) > 0)
        return view('welcome')->withDetails($user)->withQuery ( $q );
    else return view ('welcome')->withMessage('No Details found. Try to search again !');
});

эта логика ищет в таблице User имя и адрес электронной почты с вводом, который мы предоставляем, здесь мы используем оператор LIKE для поиска данных,
после получения данных данные отправляются в приветственное представление вместе с сообщением, когда результаты поиска не отображаются нашел.

Здесь вся логика записана в самом файле маршрутов, если мы хотим создать контроллер, мы можем это сделать, здесь только одна простая логика, поэтому мы не использовали контроллер.

Результаты поиска :

Приветственный вид для отображения результатов поиска будет выглядеть так:

<div class="container">
    @if(isset($details))
        <p> The Search results for your query <b> {{ $query }} </b> are :</p>
    <h2>Sample User details</h2>
    <table class="table table-striped">
        <thead>
            <tr>
                <th>Name</th>
                <th>Email</th>
            </tr>
        </thead>
        <tbody>
            @foreach($details as $user)
            <tr>
                <td>{{$user->name}}</td>
                <td>{{$user->email}}</td>
            </tr>
            @endforeach
        </tbody>
    </table>
    @endif
</div>

Файл маршрутов выглядит так:

<?php
use App\User;
use Illuminate\Support\Facades\Input;
Route::get ( '/', function () {
    return view ( 'welcome' );
} );
Route::any ( '/search', function () {
    $q = Input::get ( 'q' );
    $user = User::where ( 'name', 'LIKE', '%' . $q . '%' )->orWhere ( 'email', 'LIKE', '%' . $q . '%' )->get ();
    if (count ( $user ) > 0)
        return view ( 'welcome' )->withDetails ( $user )->withQuery ( $q );
    else
        return view ( 'welcome' )->withMessage ( 'No Details found. Try to search again !' );
} );

для разных типов маршрутизации проверьте предыдущий пост о маршрутизации.

Теперь, когда кто-то запрашивает базу данных, мы можем видеть соответствующие результаты.

Посмотрите на скриншоты ниже,

Сообщение: https://justlaravel.com/search-functionality-laravel/



YouTube: https://www.youtube.com/watch?v=RJqHwsr3Jhs

Рабочая демонстрация: https://demos.justlaravel.com/search-functionality-in-laravel



GitHub: https://github.com/avinashn/searchexamplelaravel