Magento 2 Upgrade Schema

No último post, falamos sobre Magento 2 Install Data. Dando continuidade aos nossos estudos sobre banco de dados, hoje falaremos sobre Magento 2 Upgrade Schema.

Magento 2 Upgrade Schema

A classe Setup/UpgradeSchema é utilizada quando precisamos fazer alguma atualização em uma tabela já criada. Por exemplo, como no caso abaixo, adicionaremos uma nova coluna chamada status

Para isso, voltando ao módulo, crie a classe a seguir:

<?php

namespace ForMage\Blog\Setup;

use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\SchemaSetupInterface;
use Magento\Framework\Setup\UpgradeSchemaInterface;
use Magento\Framework\DB\Ddl\Table;

class UpgradeSchema implements UpgradeSchemaInterface
{
    /**
     * @param SchemaSetupInterface $setup
     * @param ModuleContextInterface $context
     */
    public function upgrade(
        SchemaSetupInterface $setup,
        ModuleContextInterface $context
    ) {
        $setup->startSetup();

        if (version_compare($context->getVersion(), '0.0.2', '<')) {
            $setup->getConnection()->addColumn(
                $setup->getTable('post'),
                'status',
                [
                    'nullable' => false,
                    'type' => Table::TYPE_TEXT,
                    'length' => 7,
                    'after' => 'description',
                    'comment' => 'Status do post'
                ]
            );
        }


        $setup->endSetup();
    }
}

E modifique o etc/module.xml para a versão 0.0.2, como se segue:

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="ForMage_Blog" setup_version="0.0.2"/>
</config>

Explicando

A versão de um módulo no Magento 2 é declarada no atributo setup_version em <module name="ForMage_Blog" setup_version="0.0.2"/> em nosso etc/module.xml.

Quando usamos o Magento 2 Upgrade Schema, precisamos informar ao Magento qual será a próxima versão do nosso módulo e o que ele deverá fazer com essa nova versão.

if (version_compare($context->getVersion(), '0.0.2', '<')) {
            $setup->getConnection()->addColumn(
                $setup->getTable('post'),
                'status',
                [
                    'nullable' => false,
                    'type' => Table::TYPE_TEXT,
                    'length' => 7,
                    'after' => 'description',
                    'comment' => 'Status do post'
                ]
            );
        }

Note que temos um if (version_compare($context->getVersion(), '0.0.2', '<')) {. Com isso, fazemos a seguinte comparação: verificamos se a versão atual do nosso módulo em setup_module é menor que a versão 0.0.2. Se for, executaremos o código dentro do nosso if. Ao entrarmos no if, temos uma atualização da tabela post com a adição da coluna status.

Feito isso, executando php bin/magento setup:upgrade temos:

Magento 2 - Trabalhando com UpgradeSchema

Para mais informações, veja

 

 

 

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *