Magento 1: Как добавить индекс на таблицу
Столкнулся с тем, что на проекте с Magento 1 было необходимо добавить индекс через upgrade скрипт. Проблема была в том, что на тестовом сервере такой индекс добавили руками, а на стейджинге он был под другим названием. Под катом привожу пример апгрейд скрипта в котором, есть удаление старых индексов, проверка на существование и добавление нового..
app/code/local/Arb/Portal/sql/portal_setup/mysql4-upgrade-0.1.0-0.2.0.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
/** @var \Mage_Core_Model_Resource_Setup $installer */ $installer = $this; $installer->startSetup(); $table = $installer->getTable('arb_portal'); if ($installer->tableExists($table)) { /** @var \Magento_Db_Adapter_Pdo_Mysql $connection */ $connection = $installer->getConnection(); $indexes = $connection->getIndexList($table); // Drop indexes that were created manually during hotfix $oldIndexes = ['UNQ_ARB_PORTAL_ID','ARB_PORTAL_STORECODE']; foreach($oldIndexes as $oldIndex) { if (isset($indexes[$oldIndex])) { $connection->dropIndex($table, $oldIndex); } } // Create correct index $indexFields = array('storecode'); $index = $installer->getIdxName($table, $indexFields, Varien_Db_Adapter_Interface::INDEX_TYPE_INDEX); if (!isset($indexes[$index])) { $connection->addIndex($table, $index, $indexFields); } } $installer->endSetup(); |
Тут мы проверяем что нужная таблица существует. Затем получаем список индексов в ней. После этого проверяем есть ли в этом списке старые индексы и если есть удаляем их. После этого проверяем нет ли нового индекса, и если нет добавляем его.
Author: | Tags: /
| Rating:
Leave a Reply