2017-04-03 59 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); 
}