CakePHP повторяет одни и те же запросы
-
21-09-2019 - |
Вопрос
У меня есть структура модели:Категория имеетМного Товар имеетМного На складеТовар принадлежитСкладу, Производителю.
Я извлекаю данные с помощью этого кода, используя Containable, чтобы иметь возможность более глубоко фильтровать связанные модели:
$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
По сути, при построении структуры данных Cake снова и снова извлекает данные из 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 выполняет только один запрос.
Альтернативно вы можете создавать представления базы данных для сложных запросов.