我从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)。
如果我输出刀片中的链接,我会得到类似的结果:
但如果我点击“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);
分页片段:
{{ $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
答案 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将为你处理剩下的事情。