Дата последнего изменения: 09.07.2024
Всегда минимизируйте запросы. Например, если в цикле идет запрос к элементу ИБ, то уже необходимо задуматься над минимизацией. Да, это займет больше времени, но вам скажут спасибо клиенты.
Нельзя:
foreach($arResult["ORDERS"] as $key => $val) { foreach($val["BASKET_ITEMS"] as $vvval) { $rsEls = CIBlockElement::GetByID(); } }
Следует:
$arIDs = array(); foreach($arResult["ORDERS"] as $key => $val) { foreach($val["BASKET_ITEMS"] as $vvval) { $arIDs[] = $vvval["PRODUCT_ID"]; } } if(!empty($arIDs)) { $rsEls = CIBlockElement::GetList(array(), array("ID" => $arIDs)); ... } foreach($arResult["ORDERS"] as $key => $val) { foreach($val["BASKET_ITEMS"] as $vvval) { //наполняем данные, налаживая соответствие ID-ков } }
Фактически, вы сводите порой десятки, если не сотни, запросов к одному.
Если для какого-либо изменения в БД предусмотрен специальный метод, то следует использовать именно его, а не более общий метод изменения БД.
Хороший пример - модуль интернет-магазина и работа с заказом: можно изменить флаг оплаты заказа путем CSaleOrder::Update, а можно путем CSaleOrder::PayOrder. Так вот, следует применять именно PayOrder, потому что в нем произойдет вызов соответствующих обработчиков.
Даже если вам надо изменить множество полей (того же заказа) и флаг оплаты, то произведите изменение через PayOrder, а затем уже апдейт остальных полей.