Cakephp3.2之分頁類

作爲API的cake框架時,框架自帶的分類已經不能滿足跨域的這種數據分頁查詢,所以寫了一個請求分頁類
<?php
namespace App\Common;
use Cake\ORM\TableRegistry;
use App\Controller\AppController;
use Cake\Datasource\ConnectionManager;
class Paging extends AppController{
   public $limits=1;
    /**
     * 分頁查詢
     * @param string $query  SQL對象
     * @param string $limit  每頁數據條數
     * @param string $page   當前頁碼
     * @param string $orderBy 分頁根據
     * @param string $order   排序順序
     * @return multitype:string multitype:unknown string multitype:string   multitype:number  unknown
     */
	public static function paging($query='',$limit='',$page='',$orderBy='',$order='desc'){
	

	$page=empty($page)?1:$page;
	
	$object = $query->repository();
	
	$orderBy=empty($orderBy)?$object->alias().".id":$orderBy;
	$limits=[
	'limit' => $limit,
	'order' => [
	    $orderBy => $order
	],
	'page' => $page,
	'whitelist' => [
	    (int) 0 => 'limit',
	    (int) 1 => 'sort',
	    (int) 2 => 'page',
	    (int) 3 => 'direction'
	]
	];
         //分頁查詢
         $rest=$query->applyOptions($limits);
         
         //查詢
         $findData=$rest->all()->toArray();
         
         //查詢數量
         $numResults = count($findData);
         
         //如果查到數據計算所有數據總數
         $count = $numResults ? $query->count() : 0;
        
         //總頁碼
         $pageCount = (int)ceil($count / $limit);
         //顯示頁碼
         $pag=[];
         for ($i=1;$i<=$pageCount;$i++){
             $pag[]=$i;
         }
         
         $data=[
             'page'=>$page,//當前頁
             'data'=>$findData,//當前頁數據
             'limit'=>$limit,//每頁數據
             'pageNumber'=>$pag,
             'pageCount'=>$pageCount
             
         ];
         return $data;
	}
}
?>

當程序調用的時候只需要引入它對應位置的命名空間就可以調用了

Paging::paging('cake自帶的query對象',‘每頁數據條數’,‘頁碼’)

*query對象 :   $TgMaterials = TableRegistry::get('tg_*');

                          $rest=$TgMaterials->find()

                                      ->where(['id]=>1);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章