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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top