Eloquent 分页组件 pagination 单独使用完全攻略(原创)

2017-07-06 12:52:44 +08:00
 yyy123456

为了单独使用 Eloquent 分页,当然得先使用 Eloquent 库,

本代码完全脱离 lavavel5.4 环境。只加载最新的 5.4 类库,故意不使用模板,让代码含义更加清晰。

composer

"illuminate/database":"5.4.27" ,
"illuminate/events":"5.4.27",
"illuminate/pagination":"5.4.27"

建表

CREATE TABLE `test_databases` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `db_name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '库名',
  `user_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '测试用户 id',
  `created_at` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',
  `updated_at` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '修改时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB

请自行插入一百条数据。^_^

假设本机项目域名 www.t3.com

本代码网址 http://www.t3.com/paginator/ill

首页只需输入上面网址即可,点击第 2 页,会自动加 page 查询参数。

代码中各种解释应该比较清楚了。

<?php
namespace app\control;
use \Illuminate\Database\Capsule\Manager as Capsule;
// use \Illuminate\Events\Dispatcher;
// use \Illuminate\Container\Container;
use \Illuminate\Pagination\UrlWindow;
class Paginator {
   
 public function ill( $req, $res, $args) {
       $capsule = new Capsule;
       $capsule->addConnection([
           'driver'    => 'mysql',
           'host'      => '127.0.0.1',
           'database'  => 'test1',
           'username'  => 'root',
           'password'  => 'root',
           'charset'   => 'utf8mb4',
           'collation' => 'utf8mb4_unicode_ci',
           'prefix'    => '',
       ]);
       $capsule->setAsGlobal();
       $conn =$capsule; 
       echo "<h1>Eloquent 分页使用</h1>";
      
       $order  = "id" ;// 这里定义排序字段。
       $page = intval( $_GET["page"]);
       if (!$page) {
           $page=1;
       }
       
       $per_page = 4; //每页显示 4 条结果
       
       //获取结果
       $paginator = $conn::table('test_databases')->select(['db_name','user_id'])->orderBy($order, 'asc')
         ->limit(100)
         ->paginate($per_page, ['*'],'page',$page);
      //先显示结果集
      foreach ($paginator as $v) {
          echo $v->db_name . " = " . $v->user_id."<br>";
      }
      
      //必须设置网址
       $paginator->setPath('/paginator/ill');
      //设置其他 query 参数
      // $users->appends('order', $order);
      
       // 得到 laravel 构建的链接结果,是数组。分 3 部分,first,slider,  last
       $win = new UrlWindow($paginator);
       // 2×3 +1 就是显示在中间的链接个数,
       // 也可以不填写的,默认是 3.
       $url_arr = $win->get(3);
              
       if ($paginator->hasPages()) { //有结果集才显示啊
           if (!$paginator->onFirstPage()) {
               echo "<a href='{$paginator->previousPageUrl()}'>上页</a>"."&nbsp;&nbsp;";
           }
           
           if (isset( $url_arr['first'] )) {
               foreach ($url_arr['first'] as $k=> $v ) {
                   $style=" ";
                   if ($k == $paginator->currentPage()) {
                       $style=" style='color:red' ";
                   }
                   echo "<a {$style} href='{$v}'>$k</a>"."&nbsp;&nbsp;";
               }
           }
           
           if (isset( $url_arr['slider'] )) {
               echo '...'; // 这样页面漂亮些。
               foreach ($url_arr['slider'] as $k=> $v ) {
                   $style=" ";
                   if ($k == $paginator->currentPage()) {
                       $style=" style='color:red' ";
                   }
                   echo "<a {$style}  href='{$v}'>$k</a>"."&nbsp;&nbsp;";
               }
           }
           
           if (isset( $url_arr['last'] )) {
               echo '...'; // 这样页面漂亮些。
               foreach ($url_arr['last'] as $k=> $v ) {
                   $style=" ";
                   if ($k == $paginator->currentPage()) {
                       $style=" style='color:red' ";
                   }
                   echo "<a  {$style} href='{$v}'>$k</a>"."&nbsp;&nbsp;";
               }
           }
           
           if ($paginator->lastPage()!=$page) {
               echo "<a href='{$paginator->nextPageUrl()}'>下页</a>"."&nbsp;&nbsp;";
           }
           
       }else {
           echo "没查到数据";
       }
   }
}

展示效果

2948 次点击
所在节点    PHP
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/373442

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX