스크립트 설치 : 테이블 작성 및 기존 테이블 업데이트


22

하나의 질문이 있습니다. 최근에 DB에 많은 테이블이있는 하나의 모듈을 개발하고 개념이 자주 변경되어 DB의 기존 테이블을 변경해야했기 때문에 스크립트와 테이블 업그레이드를 만드는 테이블의 차이점을 발견했습니다. 여기 요 아래 테이블 코드 작성을보십시오.

$table = $installer->getConnection()
    ->newTable($installer->getTable('module/table'))
    ->addColumn('id', Varien_Db_Ddl_Table::TYPE_INTEGER, 9, array(
        'nullable' => false,
        'primary' => true,
        'identity' => true,
        'auto_increment' => true
    )
);

newTable () 의 함수가 반환 인스턴스 Varien_Db_Ddl_Table 및 업그레이드 테이블 스크립트를 살펴, 기존 테이블에 새 열을 추가하기 위해 다른 방법을 사용합니다 :

$installer->getConnection()
    ->addColumn($tableName, 'test', array(
        'nullable' => false,
        'length' => 9,
        'type' => Varien_Db_Ddl_Table::TYPE_INTEGER,
        'comment' => 'Test Field'
    )
)

이 두 addColumn 함수는 다르며 다른 클래스의 메소드이며 구문을 변경해야 할 때마다 나를 슬프게합니다.
그래서 여기에 질문이 있습니다. Varien_Db_Ddl_Table 클래스의 인스턴스를 사용하여 기존 테이블을 업데이트하는 방법이 있습니까?

답변:


15

Varien_Db_Ddl_Table 개체를 사용하여 기존 테이블을 수정하는 방법이 없습니다. 해당 클래스의 코드로 들어가면 테이블의 기존 스키마를 가져 오는 영역이 표시되지 않거나 테이블이 어떤 식으로 존재하는지 확인합니다. 테이블을 수정하는 데 사용해야하는 경우에 필요합니다.

또한 Varien_Db_Adapter_Interface에는 Varien_Db_Ddl_Table 개체를 매개 변수로 사용하는 'updateTable'줄에 메서드가 없습니다.

이것은 마 젠토에서 '코드 냄새'중 하나입니다. 두 가지 완전히 다른 코드 블록이 다른 방식으로 동일한 것을 달성하려고 시도하기 때문입니다. 버그로만 이어질 것입니다.


좋은 답변, 나는 많은 생각, 감사합니다 :)
Nick

2
이제 Magento 2 pull 요청을 수정 해 :-)
Alex

6

프로젝트 범위 내에 있으면 언급 한대로 모델이 자주 변경되는 경우 EAV 모델로 변경하는 것이 좋습니다. 이렇게하면 데이터 마이그레이션을 혼란스럽게하는 문제를 줄일 수 있습니다. 다음 은 Magento에서 EAV의 기본 사항을 설명하여이를 평가하고 프로젝트에 적합한 지 결정 하는 기사 입니다.

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