2017-04-03 115 views
0

我目前正在CakePHP項目上工作。我陷入困境。cakePHP和sql查看 - 分頁花費太長的時間來加載?

我已經創建了一個使用MSSQL視圖作爲表的模型:

<?php 
    class OrderList extends AppModel{ 
     public $useTable = 'vOrderList'; 
     public $primaryKey = 'OrderNumber'; 
     public $order = array(
      "OrderList.OrderNumber"=>"desc" 
     ); 
    } 

在sepreate模型的控制,我加載這個自定義模式,並試圖分頁的索引頁結果:

 $this->loadModel("OrderList"); 
     $this->paginate = array(
      "OrderList" => array(
       'limit'=>10, 
       'contain'=>array() 
      ); 
     ); 
     $results = $this->paginate("OrderList"); 

但是,查詢時間太長了!

加載頁面需要8秒! 但是,如果我直接在mssql中打開查看錶,它只需要幾毫秒即可加載。

我想不通爲什麼!

當我加載除了我創建的視圖以外的任何其他模型,它的作品完美。它只是不適用於我製作的自定義視圖表

如果有人有任何想法,我可以使用你的幫助!

在此先感謝!

回答

0

好吧我想通了。它正在計算vOrderList中的條目數量,這是大部分時間所需要的。我改變了我的OrderList模型來計算實際的訂單表。

/** 
* Overridden paginate method 
*/ 
public function paginate($conditions, $fields, $order, $limit, $page = 1, 
    $recursive = null, $extra = array()) { 
    $recursive = -1; 

    return $this->find(
     'all', 
     compact('conditions', 'fields', 'order', 'limit', 'page', 'recursive', 'group') 
    ); 
} 

/** 
* Overridden paginateCount method 
*/ 
public function paginateCount($conditions = null, $recursive = 0, 
           $extra = array()) { 
    $sql = 
     " 
     SELECT COUNT(*) AS [count] FROM [CustomerOrder] AS [Order] WHERE 1 = 1 
     "; 
    $this->recursive = $recursive; 
    $results = $this->query($sql); 
    return count($results); 
} 
相關問題