Pregunta

Tengo un modelo de estructura:. Categoría hasMany Producto hasMany Stockitem belongsTo Almacén, fabricante

I obtener los datos con este código, usando contenible a ser capaz de filtrar más profundo en los modelos asociados:

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

Estructura de datos se devuelve muy bien, sin embargo, consigo varias consultas que se repiten como, a veces cientos de este tipo de consultas en una fila, sobre la base de datos.

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

Básicamente, cuando la construcción de la torta de estructura de datos es ir a buscar los datos de MySQL una y otra vez, para cada fila. Tenemos conjuntos de datos de varios miles de filas, y tengo la sensación de que se va a afectar al rendimiento. ¿Es posible hacer que sea resultado de caché y no repetir mismas consultas?

¿Fue útil?

Solución

Prueba esto:

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

Si se quita del almacén y del fabricante se encuentra que Cakephp sólo se ejecuta una consulta.

Como alternativa, puede crear vistas de base de datos para consultas complejas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top