2010-03-19 3 views
1

J'ai une structure de modèle: Catégorie hasMany Product hasMany Stockitem appartient à Warehouse, Manufacturer.CakePHP répète les mêmes requêtes

Je récupérer les données avec ce code, en utilisant maîtrisable pour pouvoir filtrer plus profondément dans les modèles associés:

$this->Category->find('all', array(
     'conditions' => array('Category.id' => $category_id), 
     'contain' => array(
      'Product' => array(
       'Stockitem' => array(
        'conditions' => array('Stockitem.warehouse_id' => $warehouse_id), 
        'Warehouse', 
        'Manufacturer', 
       ) 
      ) 
     ), 
     ) 
    ); 

structure de données est retournée très bien, cependant, je reçois plusieurs requêtes répétitives comme, parfois des centaines de ces requêtes dans une rangée, basée sur l'ensemble de données.

SELECT `Warehouse`.`id`, `Warehouse`.`title` FROM `beta_warehouses` AS `Warehouse` WHERE `Warehouse`.`id` = 2 

En principe, lorsque la construction de la structure de données gâteau est la récupération des données à partir de mysql maintes et maintes fois, pour chaque ligne. Nous avons des ensembles de données de plusieurs milliers de lignes, et j'ai le sentiment que cela va affecter la performance. Est-il possible de rendre les résultats du cache et ne pas répéter les mêmes requêtes?

Répondre

1

Essayez ceci:

$this->Product->find('all', array(
    'conditions' => array('Category.id' => $category_id, 'Stockitem.warehouse_id' => $warehouse_id), 
    'contain' => array(
     'Category' 
     , 'Stockitem' => array(
      'Warehouse' 
      , 'Manufacturer' 
     ) 
    ), 
)); 

Si vous supprimez l'entrepôt et du fabricant, vous trouverez que CakePHP exécute une seule requête.

Vous pouvez également créer des vues de base de données pour des requêtes complexes.

+0

Colonne inconnue 'Stockitem.warehouse_id' dans 'clause where' – Rytis

Questions connexes