Как я могу добавить новый столбец в существующую таблицу ядра Magento через скрипт установки? (без использования чистого SQL)
Я хочу использовать способ Magento, который использует псевдонимы для создания сценария установки.
До сих пор я следовал нескольким учебникам. Но, похоже, не работает должным образом. Этот StackOverflow ALTER TABLE в скрипте установки Magento без использования ответа SQL был несколько похож на мой вопрос. Но какой контент нужно поместить в confg.xml
файл модуля ? Нужно ли просто определить модель ресурса, данных модели и настройки будет достаточно?
Соответствующая часть config.xml
(моего модуля) выглядит следующим образом.
<config>
. . .
<global>
<models>
<mymodule>
<class>Mynamespace_Mymodule_Model</class>
<resourceModel>mymodule_resource</resourceModel>
</mymodule>
<mymodule_resource>
<class>Mynamespace_Mymodule_Model_Resource</class>
</mymodule_resource>
</models>
<resources>
<mymodule_setup>
<setup>
<module>Mynamespace_Mymodule</module>
</setup>
<connection>
<use>core_setup</use>
</connection>
</mymodule_setup>
<mymodule_read>
<connection>
<use>core_read</use>
</connection>
</mymodule_read>
<mymodule_write>
<connection>
<use>core_write</use>
</connection>
</mymodule_write>
</resources>
. . . .
</config>
И мой скрипт установки выглядит следующим образом.
$installer = $this;
$installer->startSetup();
$installer->getConnection()
->addColumn($installer->getTable('sales_flat_order'),'custom_value', Varien_Db_Ddl_Table::TYPE_VARCHAR, 255, array(
'nullable' => false,
), 'Title');
$installer->endSetup();
Но я получаю следующую ошибку.
SQLSTATE [42S02]: Базовая таблица или представление не найдено: 1146 Таблица '255.sales_flat_order' не существует
Любое предложение исправить это будет оценено.
источник
255
?Ответы:
sales_flat_order
это полное имя,table
и поэтому вы должны использовать псевдоним в$installer->getTable()
По
$installer->getTable()
параметру вродеmodule_alias/table_alias.
В этом случае попробуйте с
Когда вы напишите это, он вернет имя таблицы
sales_flat_order
потому что
РЕДАКТИРОВАТЬ
Вы можете использовать скрипт ниже, чтобы добавить новый столбец. Он отлично работает в моей системе
Я использую
Varien_Db_Ddl_Table::TYPE_TEXT
insted,Varien_Db_Ddl_Table::TYPE_VARCHAR
потому чтоTYPE_VARCHAR
устарелаТы можешь проверить @
Varien_Db_Adapter_Pdo_Mysql::$_ddlColumnTypes
И если вы указываете тип,
TYPE_TEXT
но устанавливаете длину, скажем,255
Magento создастMySQL
столбецVARCHAR
типа.источник
Вы неправильно используете метод
addColumn
:четвертый параметр - имя схемы, в вашем вызове четвертый параметр -
255
.Если вы используете правильные параметры, это должно работать.
источник
Я понимаю, что это относительно «старый» вопрос, но так как он все еще довольно легко найти в Google, я решил добавить эту информацию.
Что касается вашего вопроса, если вы хотите изменить таблицу продаж / заказов, этого не следует делать с помощью традиционных скриптов установки / установки.
Mage_Catalog
Модуль использует другойResource_Setup
класс, а именноMage_Sales_Model_Resource_Setup
.Если вы хотите добавить атрибуты в модель продаж / заказа, чтобы убедиться, что все добавлено и обработано правильно, добавьте свой атрибут следующим образом:
Если вам интересно, почему , тогда ответ находится в пределах
addAttribute()
функцииMage_Sales_Model_Resource_Setup
класса:источник
addAttribute
для модуля Sales_Order$this
установщик, ваш ответ указал мне правильное направление. Спасибо большое!