Есть 300-500 товаров, которым нужно обновить и свойства, и остатки, и цены. И возникли вопросы:
1) Я правильно понимаю, что если делать через итерацию то это куча запросов в базу данных, что тормозит код?
Например:
foreach ($items as $item) {
\CIBlockElement::Update();
\CCatalogProduct::Add();
\CCatalogStoreProduct::UpdateFromForm();
\CPrice::Update()
}
2) Если делать через транзакции, то это тоже обновление по очереди, но с возможностью откатить все изменения, если обновление одного прошло с ошибкой?
Например:
// Запуск транзакции
$DB->StartTransaction();
try {
foreach ($items as $item) {
\CIBlockElement::Update();
\CCatalogProduct::Add();
\CCatalogStoreProduct::UpdateFromForm();
\CPrice::Update();
if ($error) throw new Exception($error_text);
}
$DB->Commit();
}
// Обработка ошибок
catch( Exception $ex ) {
$DB->Rollback(); // Откат изменений
}
3) Как вообще ускорить обновление? Есть функция для массового обновления?