Создайте сценарий обновления Magento 2 для добавления/обновления нового поля в таблицу настраиваемых модулей.
-
13-12-2019 - |
Вопрос
У кого-нибудь есть идеи/предложения по поводу создания сценария обновления Magento 2 (стабильная версия CE) (в пользовательском модуле) для добавления/обновления нового поля в пользовательскую таблицу?
Я знаю об «InstallSchema», но есть ли что-то вроде «UpgradeSchema» для обновления таблиц модулей?
Объясните пожалуйста подробно с примерами.
Решение
создать app\code\Sugarcode\Test\Setup\UpgradeSchema.php
и запустите команду обновления
когда когда-либо версия была изменена, просто измените модуль.xml и в UpgradeSchema.php добавьте еще одно условие if с сравнением версий
if (version_compare($context->getVersion(), '2.0.1', '<')) {
// Changes here.
}
поэтому, когда вы запустите команду обновления, она запустится UpgradeSchema.php
файл, и он будет сравнивать версию на основе этой версии, он выполнит код
бывший
<?php
namespace Sugarcode\Test\Setup;
use Magento\Framework\Setup\UpgradeSchemaInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\SchemaSetupInterface;
use Magento\Framework\DB\Ddl\Table;
class UpgradeSchema implements UpgradeSchemaInterface
{
public function upgrade(SchemaSetupInterface $setup, ModuleContextInterface $context)
{
$setup->startSetup();
$tableName = $setup->getTable('testtable');
if (version_compare($context->getVersion(), '2.0.0') < 0) {
// Changes here.
}
if (version_compare($context->getVersion(), '2.0.1', '<')) {
// Changes here.
}
if (version_compare($context->getVersion(), '2.0.2', '<')) {
if ($setup->getConnection()->isTableExists($tableName) == true) {
$connection = $setup->getConnection();
/* $connection->addColumn(
$tableName,
'updated_at',
['type' => Table::TYPE_DATETIME,'nullable' => false, 'default' => '', 'afters' => 'created_at'],
'Updated At'
); */
$connection->changeColumn(
$tableName,
'summary',
'short_summary',
['type' => Table::TYPE_TEXT, 'nullable' => false, 'default' => ''],
'Short Summary'
);
// Changes here.
}
}
$setup->endSetup();
}
}
модуль.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Module/etc/module.xsd">
<module name="Sugarcode_Test" setup_version="2.0.2" schema_version="2.0.2" />
</config>
если это работает, примите ответ, щелкнув правый символ