Home > Backend Development > PHP Tutorial > Laravel paging problem example

Laravel paging problem example

零下一度
Release: 2023-03-13 07:44:01
Original
1682 people have browsed it

<span class="token scope"><span class="token punctuation"><span class="token function">#Paging is very commonly used on web pages, basically every web page has it. First, let’s take a look at the source code of Laravel’s paging method: </span></span></span>

<code class="hljs php has-numbering"><span class="hljs-comment">#vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php:480<span class="hljs-keyword">public <span class="hljs-function"><span class="hljs-keyword">function <span class="hljs-title">paginate<span class="hljs-params">(<span class="hljs-variable">$perPage = null, <span class="hljs-variable">$columns = [<span class="hljs-string">&#39;*&#39;], <span class="hljs-variable">$pageName = <span class="hljs-string">&#39;page&#39;, <span class="hljs-variable">$page = null)
{<span class="hljs-variable">$query = <span class="hljs-variable">$this->toBase();<span class="hljs-variable">$total = <span class="hljs-variable">$query->getCountForPagination();<span class="hljs-variable">$this->forPage(<span class="hljs-variable">$page = <span class="hljs-variable">$page ?: Paginator::resolveCurrentPage(<span class="hljs-variable">$pageName),<span class="hljs-variable">$perPage = <span class="hljs-variable">$perPage ?: <span class="hljs-variable">$this->model->getPerPage()
        );<span class="hljs-keyword">return <span class="hljs-keyword">new LengthAwarePaginator(<span class="hljs-variable">$this->get(<span class="hljs-variable">$columns), <span class="hljs-variable">$total, <span class="hljs-variable">$perPage, <span class="hljs-variable">$page, [<span class="hljs-string">&#39;path&#39; => Paginator::resolveCurrentPath(),<span class="hljs-string">&#39;pageName&#39; => <span class="hljs-variable">$pageName,
        ]);
}<br/>我们发现这个关键就是用了lengthAwarePaginator.<br/>  LengthAwarePaginator的构造方法,如下:<br/></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code>
Copy after login
假定分页得数组为:
Copy after login
[
  {
    "id": 9,
    "sys_id": 1,
    "org_id": 2,
    "user_id": 8,
    "papaer_id": 26,
  },
  {
    "id": 5,
    "sys_id": 1,
    "org_id": 2,
    "user_id": 8,
    "papaer_id": 26,
  },
  {
    "id": 1,
    "sys_id": 1,
    "org_id": 2,
    "user_id": 8,
    "papaer_id": 26,
  }
]
Copy after login
这里一共3条数据,我们设定每页显示1个,一共3页。
分页调用
   use Illuminate\Pagination\LengthAwarePaginator;
  use Illuminate\Pagination\Paginator;

  public function show(Request $request){
        $perPage = 1;            //每页显示数量
        if ($request->has(&#39;page&#39;)) {
                $current_page = $request->input(&#39;page&#39;);
                $current_page = $current_page <= 0 ? 1 :$current_page;
        } else {
                $current_page = 1;
        }
        $item = array_slice($real, ($current_page-1)*$perPage, $perPage); //注释1
        $total = count($real);

        $paginator =new LengthAwarePaginator($item, $total, $perPage, $current_page, [
                &#39;path&#39; => Paginator::resolveCurrentPath(),  //注释2
                &#39;pageName&#39; => &#39;page&#39;,
        ]);
          return response()->json([&#39;result&#39;=>$paginator])
   }
Copy after login

The key point in the above code is $item. If you don’t do it Note 1 is processed and all 7 pieces of data are obtained.

Comment 2 is to set a url address to be paginated. It can also be set manually via $paginator ->setPath(‘path’).

The paging connection in the page is also called in the same way {{ $paginator->render() }}

Note: The format of the returned data is roughly as follows:

"result": {
    "current_page": 3,
    "data": [
    { 
      "id": 5, 
      "sys_id": 1,
      "org_id": 2,
       "user_id": 8, 
          "papaer_id": 26
     }
    ],
    "from": null,
    "last_page": 2,
    "next_page_url": null,
    "path": "http://www.text.tld/examination/show",
    "per_page": 2,
    "prev_page_url": "http://www.text.tld/examination/show?page=2",
    "to": null,
    "total": 3
  }
Copy after login

The above is the detailed content of Laravel paging problem example. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template