Magento2 : 데이터베이스 스키마 업그레이드 방법


29

magento 사용자 정의 모듈을 작업 중입니다. 모듈에 Setup\InstallSchema.php이전에 설치된 파일이 있습니다. 더 많은 데이터베이스 필드를 추가 InstallSchema.php했으므로 테이블 구조를 업데이트하고 싶지만 테이블에 변경 사항이 적용되지 않았습니다.

데이터베이스 테이블에 스키마 변경을 어떻게 적용 할 수 있습니까?

스키마를 업데이트하는 프로세스 cli 명령이 있지만 성공하지는 못했습니다.

php bin/magento setup:db-schema:upgrade

php bin/magento setup:upgrade

"php bin / magento module : uninstall"을 사용하여 제거하고 확장을 다시 설치할 수 있습니다. 처럼의 UpgradeSchema.php을 확인하는 또 다른 점 github.com/magento/magento2/commit/...은 내가 여기 정답을 찾고, 그래서 여기이 순간 어떻게 데이터베이스를 업그레이드하는 더 깨끗하고 설명하지 않습니다에서처럼 보인다
FireBear

답변 코드 아래 @FireBear appy?
Suresh Chikani

아직 시도하지는 않았지만 카탈로그 핵심 모듈 github.com/magento/magento2/blob/…의
FireBear

대부분의 경우 오류는 클래스에 대해 정의 된 네임 스페이스가 없기 때문에 발생합니다. 클래스의 네임 스페이스를 정의했는지 확인하십시오.
soukaina

답변:


48

모듈의 기존 테이블에 더 많은 열을 추가하려면 다음을 수행하십시오.

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 CLI에서 명령 실행


1
업그레이드 스크립트를 사용하여 기본 키를 추가하는 방법을 설명 할 수 있습니까? 내 테이블에는 'customer_id'가 있지만 기본 키가 아닙니다. 이제 기본 키로 추가하고 싶습니다.
Suresh Chikani

예, modifyColumnByDdl () 함수를 사용하여 변경할 수 있습니다. 다음은 스키마입니다. `공공 함수 modifyColumn ($ tableName, $ columnName, $ definition, $ flushData = false, $ schemaName = null);`
Praful Rajput

'custome_id'필드를 기본 키로 적용하는 방법은 무엇입니까? 코드 확장 설명.
Suresh Chikani

"기존 열 유형을 수정하는 방법은 무엇입니까?" 당신의 질문에?
Praful Rajput

3
@Keyur Shah, 당신은 새로운 파일 M2를 만들 필요가 없습니다. 다음 코드를 UpgradeSchema.php에 넣고 setup_version을 module.xml로 업데이트해야합니다. if (version_compare ($ context-> getVersion (), '1.0.0') <0) {// 코드 작성} if (version_compare ($ context-> getVersion (), '1.0.1') <0) {/ / your code}
Praful Rajput

2

설치 프로그램 스키마를 업그레이드하려면 '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 단계 : 모듈의 파일 변경 setup_version value (예 : 1.0.1 ~ 1.0.2)의 etc 폴더 안에 module.xml이 현재 버전 값보다 높아야합니다.

3 단계 : CLI에서 PHP bin / magento setup : upgrade 명령 실행

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.