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 설정 : 업그레이드

아무 반응이 없습니다

Upd 1.

목표를 명확하게 이해하면 설치 테이블에 값이 없을 때만 InstallSchema가 실행됩니다. 모듈이 이미 시스템에 설치되어있는 경우 UpgradeSchema를 변경해야합니다. 내 파일이 실행되지 않았기 때문입니다. 업그레이드하고 필요한 변경을 위해 이름을 변경하면 모든 것이 올바르게 작동하기 시작했습니다.

답변:


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 폴더를 작성하고 터미널 또는 웹 브라우저에서이 파일을 실행할 수 있습니다.

예를 들어 파일을 저장 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.