我正在处理一个旧的PHP项目,该项目在旧版SQL查询中运行,这很好,但是我喜欢使用Laravel Illuminate SQL程序包之类的查询构建器!
因此,我已经添加了运行Illuminate SQL所需的所有程序包依赖关系,并且此查询构建器似乎可以在分页中正常工作!
$users = Capsule::table('users')->paginate(1)->toArray();
但是,分页器似乎无法收听查询字符串!例如,通过运行上面的代码,它将提供一些属性,例如next_page,previous_page等...
当我尝试在URL中传递查询字符串时,它无法从查询字符串中获取数据(来自GET请求)!
访问此页面http://app.app/?page=2
会得到相同的结果集。
我应该如何配置Illuminate sql程序包,使其也可以侦听查询字符串?
编辑
此外,我尝试使用illuminate/http
包,但是$request->all()
方法始终返回一个空数组!这是代码:
<?php
require_once './vendor/autoload.php';
use \Illuminate\Http\Request;
$req = new Request();
echo '<pre>';
print_r($req->all());
echo '</pre>';
我缺少使用http软件包的内容,任何想法都会有所帮助。
答案 0 :(得分:3)
您必须设置页面解析器:
\Illuminate\Pagination\Paginator::currentPageResolver(function ($pageName = 'page') {
return (int) ($_GET[$pageName] ?? 1);
});
Laravel使用this解析器。
答案 1 :(得分:1)
您需要注意,分页器不会将其他参数用于查询字符串-它仅使用page
参数来获取有效的结果页面。但是例如,如果您使用:
http://app.app/?page=2&price=2
它不会从价格为2的数据库结果中提取-这是您的工作。
第二点是分页器生成的网址。
如果您这样做:
$users = Capsule::table('users')->paginate(1);
您也可以在下一行使用
$users->appends(request()->except('page'));
这会将查询字符串(页面除外)中的所有其他参数添加到url,因此first_page_url
将包含请求中的所有其他参数。
您也可以使用流利的语法将其包装起来:
$users = Capsule::table('users')->paginate(1)->appends(request()->except('page'));
答案 2 :(得分:0)
您需要在控制器中获取查询字符串,才能将get参数传递给 分页。
您可以使用Illuminate\Http\Request
类来接收和使用HTTP有效负载。
您的控制器文件:
<?php
use Illuminate\Http\Request;
class YourControllerClassName{
public function someFunction(Request $request){
echo "<pre>";
print_r($request->all());
print_r($request->input('page'));
$users = Capsule::table('users')->paginate($request->input('page'))->toArray();
}
}