【问题标题】:Laravel 5.4 - Pagination method works wrong?Laravel 5.4 - 分页方法工作错误?
【发布时间】:2017-12-08 08:37:48
【问题描述】:

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

无论如何,我得到了整个表格内容+链接立即改变:

小代码sn-p(我尝试了很多不同的想法)

$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 页。这也是正确的,因为我已将分页设置为 paginate(3)。

如果我在刀片中输出链接,我会得到如下信息:

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

无需重新加载页面或任何东西。

因此,在我想更改分页链接之前,我会获得正确数量的项目,但如果我更改为 ?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);

分页sn-p:

    {{ $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() }}

URL 现在看起来像:

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

【问题讨论】:

  • 只是预感:如果未设置页面值默认为 1 会怎样? page=1
  • 如果我在设置页面值之前将其设置为 ?page=1 (因此,如果我将 /test 更改为 /test?page=1 ,则 1-2 分页将变为 1-7。输出保持不变,因为我已经在 ?page=1 上(即使它在 URL 中不可见)

标签: php laravel laravel-5 pagination


【解决方案1】:

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

例如:

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

编辑:

而不是:

 {{ $usergroups->links() }}

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

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

【讨论】:

  • 你能再解释一下吗?我需要把这段代码 sn-p 放在哪里?
  • 您可以添加分页和搜索表单的刀片部分吗?
  • 我已经更新了我的答案,假设您使用的是 GET 参数。它应该工作
  • 这里:{{ $usergroups-&gt;appends(request()-&gt;input())-&gt;links() }}。但是,是的,Ouail 是对的
  • 我的错!我有两个看起来几乎相同的文件。原始刀片和测试刀片。对不起!!!现在完美运行!
【解决方案2】:

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

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

因此,将其更改为 GET,Laravel 将为您处理其余的事情。

【讨论】:

  • 我会试试看,一会儿回复
  • 我在传递输入值时遇到了一点问题。请看问题,我会更新它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-20
  • 2018-07-06
  • 1970-01-01
  • 1970-01-01
  • 2017-07-06
  • 1970-01-01
  • 2017-07-16
相关资源
最近更新 更多