📌  相关文章
📜  带有搜索过滤器的 laravel 分页 - PHP (1)

📅  最后修改于: 2023-12-03 15:39:24.905000             🧑  作者: Mango

带有搜索过滤器的 Laravel 分页

在Web应用程序中,分页和搜索过滤器是非常必要的功能。在Laravel中,分页是通过内置的Paginator类实现的,而搜索过滤器可以使用QueryBuilder来创建。

实现步骤
1.创建路由

首先,我们需要创建一个路由来显示我们的数据。

Route::get('/users', 'UserController@index')->name('users.index');
2.创建Controller方法

在UserController中,我们需要一个方法来处理我们的请求。

public function index(Request $request)
{
    $query = User::query();

    if ($request->has('search')) {
        $search = $request->search;

        $query->where(function ($q) use ($search) {
            $q->where('name', 'LIKE', "%$search%")
                ->orWhere('email', 'LIKE', "%$search%");
        });
    }

    $users = $query->paginate(20);

    return view('users.index', [
        'users' => $users
    ]);
}

上面的代码中,我们首先创建了一个查询对象,然后检查是否存在搜索关键字。如果存在,我们使用where方法来添加一个查询构建器,并将其传递给$query。最后,我们调用paginate方法获取分页数据。

3.创建视图

在视图中,我们可以使用Laravel内置的Blade模板引擎来显示数据。

<table class="table">
    <thead>
        <tr>
            <th>Name</th>
            <th>Email</th>
        </tr>
    </thead>
    <tbody>
        @forelse ($users as $user)
            <tr>
                <td>{{ $user->name }}</td>
                <td>{{ $user->email }}</td>
            </tr>
        @empty
            <tr>
                <td colspan="2">No users found.</td>
            </tr>
        @endforelse
    </tbody>
</table>

{{ $users->links() }}

上面的代码中,我们使用了一个简单的表格来显示数据,然后调用links方法来生成分页链接。

4.添加搜索过滤器

我们可以通过添加一个简单的表单来允许用户输入搜索关键字。

<form action="{{ route('users.index') }}" method="GET">
    <div class="form-group">
        <input type="text" class="form-control" name="search" value="{{ request('search') }}" placeholder="Search...">
    </div>
    
    <button type="submit" class="btn btn-primary">Search</button>
</form>

上面的代码中,我们创建了一个简单的搜索表单并在其中包含了搜索关键字输入框和搜索按钮。

完整代码
// Route
Route::get('/users', 'UserController@index')->name('users.index');

// UserController
public function index(Request $request)
{
    $query = User::query();

    if ($request->has('search')) {
        $search = $request->search;

        $query->where(function ($q) use ($search) {
            $q->where('name', 'LIKE', "%$search%")
                ->orWhere('email', 'LIKE', "%$search%");
        });
    }

    $users = $query->paginate(20);

    return view('users.index', [
        'users' => $users
    ]);
}

// users.index.blade.php
<table class="table">
    <thead>
        <tr>
            <th>Name</th>
            <th>Email</th>
        </tr>
    </thead>
    <tbody>
        @forelse ($users as $user)
            <tr>
                <td>{{ $user->name }}</td>
                <td>{{ $user->email }}</td>
            </tr>
        @empty
            <tr>
                <td colspan="2">No users found.</td>
            </tr>
        @endforelse
    </tbody>
</table>

{{ $users->links() }}

<form action="{{ route('users.index') }}" method="GET">
    <div class="form-group">
        <input type="text" class="form-control" name="search" value="{{ request('search') }}" placeholder="Search...">
    </div>
    
    <button type="submit" class="btn btn-primary">Search</button>
</form>

以上就是带有搜索过滤器的 Laravel 分页的实现过程。使用这个技巧,可以轻松地将分页与搜索过滤器添加到您的应用程序中。