سؤال

لدي بنية نموذجية: فئة Hasmany Product Hasmany Stockitem Warehouse ، الشركة المصنعة.

أحضر البيانات باستخدام هذا الرمز ، باستخدام احتواء لتكون قادرًا على التصفية بشكل أعمق في النماذج المرتبطة بها:

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

يتم إرجاع بنية البيانات على ما يرام ، ومع ذلك ، أحصل على استفسارات متكررة متعددة مثل ، في بعض الأحيان مئات من هذه الاستعلامات على التوالي ، استنادًا إلى مجموعة البيانات.

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

في الأساس ، عند إنشاء كعكة بنية البيانات ، يجلب البيانات من MySQL مرارًا وتكرارًا ، لكل صف. لدينا مجموعات بيانات من عدة آلاف من الصفوف ، ولدي شعور بأنه سيؤثر على الأداء. هل من الممكن جعل نتائج ذاكرة التخزين المؤقت وعدم تكرار نفس الاستعلامات؟

هل كانت مفيدة؟

المحلول

جرب هذا:

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

إذا قمت بإزالة المستودع والشركة المصنعة ، فستجد أن CakePhP ينفذ فقط استعلام واحد.

بدلاً من ذلك ، يمكنك إنشاء طرق عرض قاعدة بيانات للاستعلامات المعقدة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top