Magento2: Как обновить схему базы данных
Я работаю над пользовательским модулем magento, в модуле есть файл Setup\InstallSchema.php
, который был установлен ранее. я добавил еще несколько полей базы данных в InstallSchema.php
, поэтому я хочу обновить структуру таблицы, но таблица не внесла никаких изменений.
Как я могу применить изменения схемы к таблице базы данных?
У меня есть команды командной строки процесса для обновления схемы, но без успеха.
php bin/magento setup:db-schema:upgrade
И
php bin/magento setup:upgrade
2 answers
Если вы хотите добавить больше столбцов в существующую таблицу вашего модуля, вы можете сделать следующее.
Шаг 1: Создание UpgradeSchema.php в папке "Настройка". Получите представление из следующего кода.
namespace Vendor\ModuleName\Setup;
use Magento\Framework\Setup\UpgradeSchemaInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\SchemaSetupInterface;
class UpgradeSchema implements UpgradeSchemaInterface
{
public function upgrade(SchemaSetupInterface $setup,
ModuleContextInterface $context){
$setup->startSetup();
if (version_compare($context->getVersion(), '1.0.1') < 0) {
// Get module table
$tableName = $setup->getTable('table_name');
// Check if the table already exists
if ($setup->getConnection()->isTableExists($tableName) == true) {
// Declare data
$columns = [
'imagename' => [
'type' => \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
'nullable' => false,
'comment' => 'image name',
],
];
$connection = $setup->getConnection();
foreach ($columns as $name => $definition) {
$connection->addColumn($tableName, $name, $definition);
}
}
}
$setup->endSetup();
}
}
Шаг 2: Измените значение setup_version
в module.xml
Шаг 3: Выполните команду php bin/magento setup:upgrade
из командной строки
Для обновления схемы установщика вам необходимо написать'UpgradeSchema.php ',
Пример UpgradeSchema.php :
namespace <namespace>\<modulename>\Setup;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\SchemaSetupInterface;
use Magento\Framework\Setup\UpgradeSchemaInterface;
/**
* @codeCoverageIgnore
*/
class UpgradeSchema implements UpgradeSchemaInterface
{
/**
* {@inheritdoc}
*/
public function upgrade(SchemaSetupInterface $setup, ModuleContextInterface $context)
{
$installer = $setup;
$installer->startSetup();
/*your code here*/
$installer->endSetup();
}
}
Шаг 2: В вашем модуле вы найдете module.xml внутри папки etc в этом файле измените значение setup_version (например, с 1.0.1 на 1.0.2), значение версии должно быть выше, чем значение текущей версии.
Шаг 3: Запустите php bin/magento установка: команда обновления из командной строки