CakePHP wiederholt dieselben Abfragen
-
21-09-2019 - |
Frage
Ich habe eine Modellstruktur. Kategorie hasMany Produkt hasMany Lager lieferbar belongsTo Lager, Hersteller
Ich hole Daten mit diesem Code, contain mit zum Filter in der Lage sein tiefer in den zugehörigen Modelle:
$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',
)
)
),
)
);
ist Datenstruktur ganz gut zurück ich jedoch mehrere sich wiederholende Abfragen wie, manchmal Hunderte solcher Abfragen in einer Reihe zu bekommen, basierend auf Daten-Set.
SELECT `Warehouse`.`id`, `Warehouse`.`title` FROM `beta_warehouses` AS `Warehouse` WHERE `Warehouse`.`id` = 2
Grundsätzlich, wenn Gebäudedatenstruktur Kuchen wird Daten von mysql immer und immer wieder für jede Zeile zu holen. Wir haben Datensätze von mehreren tausend Zeilen, und ich habe das Gefühl, dass es zu Schlagleistung geht. Ist es möglich zu machen, Ergebnisse zwischenzuspeichern und nicht die gleichen Abfragen wiederholen?
Lösung
Versuchen Sie diese:
$this->Product->find('all', array(
'conditions' => array('Category.id' => $category_id, 'Stockitem.warehouse_id' => $warehouse_id),
'contain' => array(
'Category'
, 'Stockitem' => array(
'Warehouse'
, 'Manufacturer'
)
),
));
Wenn Sie Warehouse entfernen und Hersteller werden Sie feststellen, dass CakePHP führt nur eine Abfrage aus.
Alternativ können Sie Datenbankansichten für komplexe Abfragen erstellen.