2017-04-03 1 views
0

Je travaille actuellement sur un projet cakePHP. Je suis coincé.cakePHP et sql View - la pagination prend trop de temps à charger?

J'ai créé un modèle qui utilise une vue MSSQL comme la table:

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

Dans le contrôleur d'un modèle sepreate, je suis en train de charger ce modèle personnalisé et d'essayer de paginer les résultats pour la page d'index:

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

Cependant, la requête prend trop de temps!

Le chargement de la page prend 8 secondes! Cependant, si j'ouvre la table de vue directement dans mssql, il ne faut que quelques millisecondes pour la charger.

Je n'arrive pas à comprendre pourquoi!

Lorsque je charge un autre modèle en plus de la vue que j'ai créée, cela fonctionne parfaitement. Cela ne fonctionne tout simplement pas avec la table de vue personnalisée que j'ai faite

Si quelqu'un a une idée, je pourrais utiliser votre aide!

Merci d'avance!

Répondre

0

D'accord, je l'ai compris. Il comptait le nombre d'entrées dans vOrderList, ce qui prenait la plupart du temps. J'ai changé mon modèle OrderList pour compter la table des commandes réelles à la place.

/** 
* 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); 
}