суббота, 4 февраля 2012 г.

Создание колонки VARCHAR с фиксированным размером в Magento mysql-upgrade

Вчера пытался с помощью mysql-upgrade добавить колонку VARCHAR (20) в существующую таблицу и получил exception при отработке апгрейда. Чтобы было представление о чем я говорю, в файле было примерно следующее:
/** @var $installer Navoq_Backup_Model_Resource_Setup */
$installer = $this;
/** @var $adapter Varien_Db_Adapter_Pdo_Mysql */
$adapter = $installer->getConnection();

// Add 'file_name' column
$adapter->addColumn($installer->getTable('navoq_backup/file'), 'file_name', array(
    'comment'     => 'Name of file',
    'nullable'    => true,
    'column_type' => Varien_Db_Ddl_Table::TYPE_VARCHAR,
    'length'      => 100
));

Это при том, что при добавлении таблицы колонка с такими же параметрами создается:
/** @var $installer Navoq_Backup_Model_Resource_Setup */
$installer = $this;
/** @var $adapter Varien_Db_Adapter_Pdo_Mysql */
$adapter = $installer->getConnection();

/**
 * Create table 'navoq_backup/backup_list'
 */
$table = $adapter->newTable($installer->getTable('navoq_backup/file'))
    ->addColumn('file_name', Varien_Db_Ddl_Table::TYPE_VARCHAR,
        100, array('nullable'  => true), 'Name of file')
    ->setComment('Navoq Backup File List');
$adapter->createTable($table);

Мистика, не так ли? Но выход есть. Вернемся к первоначальному коду. Если добавить колонку таким образом:
/** @var $installer Navoq_Backup_Model_Resource_Setup */
$installer = $this;
/** @var $adapter Varien_Db_Adapter_Pdo_Mysql */
$adapter = $installer->getConnection();

// Add 'file_name' column
$adapter->addColumn($installer->getTable('navoq_backup/backup_list'), 'file_name', array(
    'comment'     => 'Name of file',
    'nullable'    => true,
    'column_type' => Varien_Db_Ddl_Table::TYPE_TEXT
));

У нас выполнится апгрейд и в таблице `navoq_backup_file` появится поле `file_name` типа TEXT. Но стоит нам добавить в предыдущий код параметр length:
/** @var $installer Navoq_Backup_Model_Resource_Setup */
$installer = $this;
/** @var $adapter Varien_Db_Adapter_Pdo_Mysql */
$adapter = $installer->getConnection();

// Add 'file_name' column
$adapter->addColumn($installer->getTable('navoq_backup/backup_list'), 'file_name', array(
    'comment'     => 'Name of file',
    'nullable'    => true,
    'column_type' => Varien_Db_Ddl_Table::TYPE_TEXT,
    'length'      => 100
));

И у нас создается то же поле `file_name` но типа VARCHAR и длинной в 100 символов. Enjoy ;)

Комментариев нет:

Отправить комментарий