Laravel 5.4 - 分页方法有误吗?

时间:2017-07-04 19:58:15

标签: php laravel laravel-5 pagination

我从laravel问了一个关于paginate方法的问题,因为我无法让它获得我需要的输出。我想获取name列包含特定字符串的所有记录。

无论如何,发生的事情是我获得了整个表格的内容+链接正在立即改变:

小代码片段(我尝试了许多不同的思考)

$search = $request['search'];
$usergroups = Usergroups::where('name', 'like', '%' . $search . '%')->paginate(3);

我不太确定,但我认为在我的情况下,有一个问题不是来自我的代码。如果我输出$ usergroups,我得到这个:

current_page    1
data: 
   // my data 
from    1
last_page   2
next_page_url   "http://blabla.de/test?page=2"
path    "http://blabla.de/test"
per_page    3
prev_page_url   
to  3
total   5

你可以清楚地看到共有5个项目(这是真的,我预计会得到5个项目),并且有2个页面。这也是因为我已经将分页设置为分页(3)。

如果我输出刀片中的链接,我会得到类似的结果:

enter image description here

但如果我点击“2” - 到达该分页的最后一页,我不知道为什么,但链接会立即从1-2变为1-7。

enter image description here

无需重新加载页面或任何内容。

所以在我想要改变分页链接之前,我得到正确的项目,但如果我改为?page = 2,我会得到表格中的所有项目。我不知道为什么,但也许这就是laravel的错误。我也用laravel 5.3(目前为5.​​4)尝试了它,但遇到了同样的问题。如果我查看phpmyadmin查询日志并手动尝试查询,我也会得到完美的输出。如果我使用 - > get()而不是 - > paginate();我也得到了我想要的输出。我再也不知道了。也许有人知道答案?或者我可以做些什么?如果用户想要搜索特定项目

,我不想输出整个表格

感谢您的任何建议,抱歉因为我的英语不好!

搜索表单:

<form id="search" action="{{ route("test") }}" method="get">
                <input type="hidden" name="_token" value="{{ csrf_token() }}">
                <p>
                    <small class="text-muted">Suche durch Stichwörter nach Gruppen!</small>
                </p>
                <input class="form-control searchbar" name="search" type="text"><br>
                <button type="submit" class="btn btn-lg btn-outline"><i class="fa fa-search"></i>Suchen</button>
            </form>

路线:

Route::get('test', ['as' => 'test', 'uses' => 'Group\GroupController@test'] );

控制器:

$search = Input::get('search');
$usergroups = Usergroups::where('name', 'like', '%' . $search . '%');
        $usergroups = $usergroups->paginate(3);
        return view('test.test')->with('category_groups', $usergroups);

分页片段:

    {{ $usergroups->appends(['search' => request()->query('search')])->links() }}

        <div class="row">
            @foreach($usergroups as $group)
                <div class="col-xs-12 col-sm-6 col-md-4">
                    <div class="group-style">
                        <div class="list-group" style="border: none">
                            <div class="list-group-item">
                                    <h4 class="list-group-item-heading">{{ $group['name'] }}</h4>
                                <p class="list-group-item-text text-center">
                                    {{ $group['description'] }}
                                </p>
                                <br>
                            </div>
                        </div>
                        <div class="list-group">
                            <a target="_blank" href="{{ $group['link'] }}">
                                <div class="list-group-footer">
                                    <i class="fa fa-plus"></i> Beitreten!
                                </div>
                            </a>
                        </div>
                    </div>
                </div>
            @endforeach
        </div>
    {{ $usergroups->appends(['search' => request()->query('search')])->links() }}

现在,网址如下:

http://bla.bla.com/test?search=Test

2 个答案:

答案 0 :(得分:3)

确保将查询字符串附加到您的分页链接

<强>例如

$users->appends(['search' => $searchTerm])->links()

修改

而不是:

 {{ $usergroups->links() }}

附加您的查询字符串,如下所示:

 {{ $usergroups->appends(['search' => request()->query('search')])->links() }}

答案 1 :(得分:1)

似乎search参数未添加到分页器的链接中,因此页面数量增加。

通过您的代码($search = $request['search']),不清楚参数是通过GET还是POST发送的,但我的假设是您将其作为POST发送,这就是它的原因&# 39;未添加到链接中。

所以,把它改成GET,Laravel将为你处理剩下的事情。