Domanda

Ho una struttura modello:. Categoria hasMany prodotto hasMany Stockitem belongsTo Warehouse, Produttore

I recuperare i dati con questo codice, utilizzando contenibile per essere in grado di filtrare più in profondità nei modelli associati:

$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',
                )
            )
        ),
        )
    );

La struttura dati viene restituito bene, però, ottengo più query ripetere come, a volte centinaia di tali query in fila, sulla base di set di dati.

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

In sostanza, quando si costruisce struttura dati torta è prendere i dati da mysql più e più volte, per ogni riga. Abbiamo set di dati di diverse migliaia di righe, e ho la sensazione che sta andando a influire sulle prestazioni. E 'possibile per rendere più risultati di cache e non ripetere stesse query?

È stato utile?

Soluzione

Prova questo:

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

Se si rimuove Magazzino e Produttore troverete che CakePHP esegue una sola query.

In alternativa è possibile creare viste di database per le query complesse.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top