Question

J'ai une structure modèle:. Catégorie hasMany Produit hasMany stockItem belongsTo Entrepôt, Fabricant

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é 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, en fonction des 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 Cake 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 ça va affecter les performances. Est-il possible de le faire en cache les résultats et ne pas répéter les requêtes mêmes?

Était-ce utile?

La solution

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 les requêtes complexes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top