Как реализовать поиск c фильтрами в laravel?

Пользователь

от johnpaul.blick , в категории: PHP , год назад

Как реализовать поиск c фильтрами в laravel?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от kaleigh , год назад

@johnpaul.blick 

Для реализации поиска с фильтрами в Laravel необходимо выполнить следующие шаги:

  1. Создайте маршрут для обработки запросов поиска с помощью HTTP-метода GET. Например, добавьте следующую строку в файле routes/web.php:
1
Route::get('/search', 'SearchController@search')->name('search');


  1. Создайте контроллер для обработки запросов поиска. Например, используйте команду Artisan для создания контроллера SearchController:
1
php artisan make:controller SearchController


  1. В методе search контроллера получите данные из запроса и выполните поиск с фильтрами с помощью Eloquent ORM. Например:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
public function search(Request $request)
{
    $query = $request->input('query');

    $results = Product::where('name', 'like', '%'.$query.'%')
        ->where('price', '>', $request->input('min_price'))
        ->where('price', '<', $request->input('max_price'))
        ->orderBy('name')
        ->paginate(10);

    return view('search', [
        'results' => $results,
        'query' => $query,
        'min_price' => $request->input('min_price'),
        'max_price' => $request->input('max_price'),
    ]);
}


  1. Создайте шаблон для отображения результатов поиска. Например, создайте файл resources/views/search.blade.php со следующим содержимым:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
@extends('layouts.app')

@section('content')
    <h1>Search Results</h1>

    <form action="{{ route('search') }}" method="get">
        <div class="form-group">
            <label for="query">Search Query</label>
            <input type="text" name="query" id="query" value="{{ $query }}" class="form-control">
        </div>
        <div class="form-group">
            <label for="min_price">Minimum Price</label>
            <input type="number" name="min_price" id="min_price" value="{{ $min_price }}" class="form-control">
        </div>
        <div class="form-group">
            <label for="max_price">Maximum Price</label>
            <input type="number" name="max_price" id="max_price" value="{{ $max_price }}" class="form-control">
        </div>
        <button type="submit" class="btn btn-primary">Search</button>
    </form>

    <table class="table">
        <thead>
            <tr>
                <th>Name</th>
                <th>Price</th>
            </tr>
        </thead>
        <tbody>
            @foreach ($results as $product)
                <tr>
                    <td>{{ $product->name }}</td>
                    <td>{{ $product->price }}</td>
                </tr>
            @endforeach
        </tbody>
    </table>

    {{ $results->links() }}
@endsection


В данном примере мы выводим форму для ввода параметров поиска и результаты поиска в виде таблицы. При этом мы передаем параметры поиска в представление для их сохранения в полях формы. Кроме