1

我正在开发一个旧的 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 包的东西,任何想法都会有所帮助。

4

3 回答 3

4

您必须设置页面解析器:

\Illuminate\Pagination\Paginator::currentPageResolver(function ($pageName = 'page') {
    return (int) ($_GET[$pageName] ?? 1);
});

Laravel 使用这个解析器。

于 2018-09-17T19:06:42.477 回答
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'));
于 2018-09-17T19:13:25.570 回答
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();
    }
}
于 2018-09-17T19:08:56.027 回答