2017-04-03 15 views
0

私は現在cakePHPプロジェクトに取り組んでいます。私は立ち往生している。私はテーブルとしてMSSQLビューを使用するモデル作成したcakePHPとsql View - ページングに時間がかかりすぎますか?

:sepreateモデルのコントローラーで

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

を、私はこのカスタムモデルをロードし、インデックスページの結果をページ分割しようとしています:

 $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); 
} 
関連する問題