X

Magento 1: Как добавить индекс на таблицу

Столкнулся с тем, что на проекте с Magento 1

Столкнулся с тем, что на проекте с Magento 1 было необходимо добавить индекс через upgrade скрипт. Проблема была в том, что на тестовом сервере такой индекс добавили руками, а на стейджинге он был под другим названием. Под катом привожу пример апгрейд скрипта в котором, есть удаление старых индексов, проверка на существование и добавление нового..

app/code/local/Arb/Portal/sql/portal_setup/mysql4-upgrade-0.1.0-0.2.0.php

/** @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();

Тут мы проверяем что нужная таблица существует. Затем получаем список  индексов в ней. После этого проверяем есть ли в этом списке старые индексы и если есть удаляем их. После этого проверяем нет ли нового индекса, и если нет добавляем его.

Категории: Magento