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:
Para mais informações, veja