Сегодня открыл для модификации модель продукта и к своему удивлению обнаружил избыток нелогичных запросов к базе.
Например, с каких пор два запроса DELETE/INSERT к MySQL, да и еще через условие PHP, выполняются быстрее одного UPDATE?
/admin/model/catalog/product.php стр.119-125
$this->db->query("DELETE FROM " . DB_PREFIX . "product_to_store WHERE product_id = '" . (int)$product_id . "'"); if (isset($data['product_store'])) { foreach ($data['product_store'] as $store_id) { $this->db->query("INSERT INTO " . DB_PREFIX . "product_to_store SET product_id = '" . (int)$product_id . "', store_id = '" . (int)$store_id . "'"); } }Зачем при каждом редактировании товара плодить индексные сущности, увеличивая рамер избыточных данных?И вот еще
/admin/model/catalog/product.php стр.127-154
$this->db->query("DELETE FROM " . DB_PREFIX . "product_option WHERE product_id = '" . (int)$product_id . "'"); $this->db->query("DELETE FROM " . DB_PREFIX . "product_option_description WHERE product_id = '" . (int)$product_id . "'"); $this->db->query("DELETE FROM " . DB_PREFIX . "product_option_value WHERE product_id = '" . (int)$product_id . "'"); $this->db->query("DELETE FROM " . DB_PREFIX . "product_option_value_description WHERE product_id = '" . (int)$product_id . "'"); if (isset($data['product_option'])) { foreach ($data['product_option'] as $product_option) { $this->db->query("INSERT INTO " . DB_PREFIX . "product_option SET product_id = '" . (int)$product_id . "', sort_order = '" . (int)$product_option['sort_order'] . "'"); $product_option_id = $this->db->getLastId(); foreach ($product_option['language'] as $language_id => $language) { $this->db->query("INSERT INTO " . DB_PREFIX . "product_option_description SET product_option_id = '" . (int)$product_option_id . "', language_id = '" . (int)$language_id . "', product_id = '" . (int)$product_id . "', name = '" . $this->db->escape($language['name']) . "'"); } if (isset($product_option['product_option_value'])) { foreach ($product_option['product_option_value'] as $product_option_value) { $this->db->query("INSERT INTO " . DB_PREFIX . "product_option_value SET product_option_id = '" . (int)$product_option_id . "', product_id = '" . (int)$product_id . "', quantity = '" . (int)$product_option_value['quantity'] . "', subtract = '" . (int)$product_option_value['subtract'] . "', price = '" . (float)$product_option_value['price'] . "', prefix = '" . $this->db->escape($product_option_value['prefix']) . "', sort_order = '" . (int)$product_option_value['sort_order'] . "'"); $product_option_value_id = $this->db->getLastId(); foreach ($product_option_value['language'] as $language_id => $language) { $this->db->query("INSERT INTO " . DB_PREFIX . "product_option_value_description SET product_option_value_id = '" . (int)$product_option_value_id . "', language_id = '" . (int)$language_id . "', product_id = '" . (int)$product_id . "', name = '" . $this->db->escape($language['name']) . "'"); } } } } }Это же целая уйма внутрених процессов БД по реорганизации ключей, выполнение которых можно элементарно избежать при этом упростив код.Можно закрыть глаза на админку. Но если такой код характерен для всего скрипта Open Cart, то складывается впечатление, что разработчики скрипта принебрегают качеством следуя только тенденции "скорости MVC".
Вот такие дела, не выдержал, решил написать сюда, может кто оправдает такой код. Буду рад открыть для себя что-то новое.