Magento 2. Оптимизация функции обновления таблицы

Magento 2. Оптимизация функции обновления таблицы

В Magento 2 как все знают (кто работает с этой CMS) изменилась логика добавления и обновления таблиц. Раньше это были отдельные файлы-классы, в именах которых содержались версии модуля, сейчас это несколько файлов: InstallSchema, UpgradeSchema которые содержат функции для проверки версии модуля и соответственно могут чего то сделать, если эта версия поменялась.

Некоторые разработчики сетовали на то, что новый метод не очень удобен, если модуль расширяется, часто меняется, то файлы могут со временем содержать много информации.

На этот случай – когда много данных нужно добавить, можно подключать к основному классу, другие файлы, которые будут содержать обновления, так же, для себя я немного оптимизировал основную функцию по обновлению схемы. Чтобы не “раздувать” ее, я упростил или оптимизировал ее работу так см. код.

<?php

public function upgrade(SchemaSetupInterface $setup, ModuleContextInterface $context)
    {
        $setup->startSetup();

        $upgradeFunctions = array(
            '1.1.0' => 'addIndexes',
            '1.1.1' => 'addSubdivisionColumn'
        );

        foreach ($upgradeFunctions as $version=>$function){

            if (version_compare($context->getVersion(), $version, '<')) {
                if (method_exists($this, $function)){
                    $this->{$function}($setup);
                }
            }
        }

        $setup->endSetup();
    }

    /**
     * Add the column
     * @param SchemaSetupInterface $setup
     * @return $this
     */
    protected function addSubdivisionColumn(SchemaSetupInterface $setup){
        //Your code
        return $this;
    }

    protected function addIndexes(SchemaSetupInterface $setup)
    {
        //Your code
        return $this;
    }
?>

Массив $upgradeFunctions содержит необходимые данные по версии и функции, которая должна запустится, если версия изменилась. Такая оптимизация сокращает количества кода и делает его более читабельным. Новые функции добавляются в массив.