Magento2 InstallSchema将新列添加到现有表


11

我正在尝试向magento2中的现有表添加新列

<?php

namespace Vendor\Module\Setup;

use Magento\Framework\Setup\InstallSchemaInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\SchemaSetupInterface;

/**
 * @codeCoverageIgnore
 */
class InstallSchema implements InstallSchemaInterface
{

    /**
     * {@inheritdoc}
     * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
     */
    public function install(SchemaSetupInterface $setup, ModuleContextInterface $context)
    {
        $installer = $setup;

        $installer->startSetup();

        $eavTable = $installer->getTable('eav_attribute');

        $columns = [
            'my_column' => [
                'type' => \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
                'length' => '1',
                'nullable' => false,
                'comment' => 'Description of my column',
            ],
        ];

        $connection = $installer->getConnection();
        foreach ($columns as $name => $definition) {
            $connection->addColumn($eavTable, $name, $definition);
        }

        $installer->endSetup();
    }
}

php bin / magento设置:升级

什么都没发生

更新1。

如果我清楚地了解了目标,则只有在安装表中没有任何值时才执行InstallSchema。如果您的模块已经安装在系统中-您需要在UpgradeSchema中进行任何更改。那是因为我的文件没有执行。当我将其重命名以进行升级并进行必要的更改时-一切开始正常运行

Answers:


7

首先,我假设当您说什么都没有发生时,是指安装脚本照常运行,但是没有输出错误,也没有对数据库进行任何更改。如果这不是正确的假设,请告诉我!

当我升级架构时,我没有做getTable(),我认为那是多余的。

我测试了上面的脚本并进行了更改,并且该脚本可以正常工作,因此我要执行的两个故障排除步骤是:

  1. 确保您已在setup_version中增加了module.xml(或脚本根本不会运行)
  2. 在升级脚本中添加一些明显的错误以查看其是否正在运行...如果存在错误并且脚本正在运行,则在运行时会收到错误消息 setup:upgrade

希望对您有所帮助!


1
谢谢您的答复。如果我清楚地了解了目标,则只有在安装表中没有任何值时才执行InstallSchema。如果您的模块已经安装在系统中-您需要在UpgradeSchema中进行任何更改。那是因为我的文件没有执行。当我重新命名它的升级和进行必要的修改-一切都开始正常工作
zhartaunik

抱歉,这是100%正确的,步骤1应该是从setup_module表中删除条目或使其成为升级脚本。我很高兴为您工作!
Jer_

0

从表“ setup_module”中删除模块条目,然后运行命令php bin / magento setup:upgrade。会的。


0

您可以在dbscripts文件夹中创建脚本并从终端或Web浏览器运行此文件。

例如保存文件并pub/dbscripts/filename.php粘贴此代码并根据您的要求进行更改

<?php
use Magento\Framework\App\Bootstrap;
require '../../app/bootstrap.php';
$bootstrap = Bootstrap::create(BP, $_SERVER);
$obj = $bootstrap->getObjectManager();
$state = $obj->get('Magento\Framework\App\State');
$state->setAreaCode('frontend');
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
error_reporting(E_ALL);
ini_set('display_errors', 1);
$resource = $objectManager->get('Magento\Framework\App\ResourceConnection');
$connection = $resource->getConnection();

$salesTable = $resource->getTableName('Table_Name');
$sql = "ALTER TABLE ".$salesTable. " ADD `Field_name` varchar(255)";
$connection->query($sql);

echo"Script Run Successfully";

从浏览器运行该文件

domain.name/pub/dbscripts/filename.php
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.