Como posso adicionar uma nova coluna à tabela principal do Magento via script de instalação? (sem usar SQL puro)
Eu quero usar a maneira Magento, que está usando métodos de alias para criar script de instalação.
Até agora eu segui alguns tutoriais. Mas parece não estar funcionando corretamente. Este StackOverflow ALTER TABLE no script de instalação do Magento sem usar a resposta SQL foi um pouco semelhante à minha pergunta. Mas qual é o conteúdo que deve ser colocado no confg.xml
arquivo do módulo ? Preciso apenas definir o modelo de recursos, o modelo e os dados de configuração seriam suficientes?
A parte relevante do config.xml
(do meu módulo) é a seguinte.
<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>
E meu script de instalação é o seguinte.
$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();
Mas estou recebendo o seguinte erro.
SQLSTATE [42S02]: Tabela base ou exibição não encontrada: 1146 A tabela '255.sales_flat_order' não existe
Qualquer sugestão para corrigir isso seria apreciada.
fonte
255
?Respostas:
sales_flat_order
é o nome completo dotable
e, portanto, você deve usar o alias no$installer->getTable()
No
$installer->getTable()
parâmetro comomodule_alias/table_alias.
Nesse caso, tente com
Quando você escreve isso, ele retornará o nome da tabela
sales_flat_order
Porque
EDITAR
Você pode usar o script abaixo para adicionar uma nova coluna. Funciona bem no meu sistema
estou usando
Varien_Db_Ddl_Table::TYPE_TEXT
instedVarien_Db_Ddl_Table::TYPE_VARCHAR
porqueTYPE_VARCHAR
está obsoletoVocê pode checar @
Varien_Db_Adapter_Pdo_Mysql::$_ddlColumnTypes
E Se você especificar o tipo,
TYPE_TEXT
mas definir o comprimento como, digamos, o255
Magento criará umaMySQL
coluna doVARCHAR
tipo.fonte
Você está usando incorretamente o método
addColumn
:o quarto parâmetro é o schemaName, na sua chamada, o quarto parâmetro é
255
.Se você usar os parâmetros corretos, deve funcionar.
fonte
Sei que essa é uma pergunta relativamente "antiga", mas como ainda é bastante acessível pelo Google, decidi adicionar esse pouco de informação.
Em relação à sua pergunta, se você deseja alterar a tabela de vendas / pedidos, isso não deve ser feito pelos scripts / instalações de instalação tradicionais. O
Mage_Catalog
módulo usa umaResource_Setup
classe diferente , a saberMage_Sales_Model_Resource_Setup
.Se você deseja adicionar atributos ao modelo de vendas / pedidos, para garantir que tudo seja adicionado e processado corretamente, adicione seu atributo assim:
Se você se perguntar por que , então a resposta está dentro da
addAttribute()
função daMage_Sales_Model_Resource_Setup
classe:fonte
addAttribute
para o módulo Sales_Order$this
instalador, sua resposta me indicou a direção certa. Muito obrigado!