¿Cómo puedo agregar una nueva columna a la tabla principal de Magento existente mediante el script de instalación? (sin usar SQL puro)
Quiero usar la forma Magento, que utiliza métodos de alias para crear el script de instalación.
Hasta ahora seguí algunos tutoriales. Pero parece que no funciona correctamente. Esta TABLA DE ALTERACIÓN de StackOverflow en el script de configuración de Magento sin usar la respuesta de SQL fue algo similar a mi pregunta. Pero, ¿cuál es el contenido que se debe poner en el confg.xmlarchivo del módulo ? ¿Debo definir simplemente el modelo de recursos, el modelo y los datos de configuración serían suficientes?
La parte relevante de config.xml(de mi módulo) es la siguiente.
<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>
Y mi script de instalación es el siguiente.
$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();
Pero obtengo el siguiente error.
SQLSTATE [42S02]: tabla base o vista no encontrada: 1146 La tabla '255.sales_flat_order' no existe
Cualquier sugerencia para solucionar esto sería apreciada.
fuente

255?Respuestas:
sales_flat_orderes el nombre completo detabley, por lo tanto, debe usar alias en$installer->getTable()En
$installer->getTable()parámetro comomodule_alias/table_alias.En ese caso intente con
Cuando escriba esto, devolverá el nombre de la tabla
sales_flat_orderporque
EDITAR
Puede usar el siguiente script para agregar una nueva columna. Funciona bien en mi sistema
Estoy usando
Varien_Db_Ddl_Table::TYPE_TEXTinstedVarien_Db_Ddl_Table::TYPE_VARCHARporqueTYPE_VARCHARestá en desusoPuedes comprobar @
Varien_Db_Adapter_Pdo_Mysql::$_ddlColumnTypesY si especifica el tipo
TYPE_TEXTpero establece la longitud para que digamos que255Magento creará unaMySQLcolumna deVARCHARtipo.fuente
Estás haciendo mal uso del método
addColumn:el cuarto parámetro es el nombre del esquema, en su llamada, el cuarto parámetro es
255.Si usa los parámetros correctos, debería funcionar.
fuente
Me doy cuenta de que esta es una pregunta relativamente "antigua", pero como Google todavía la puede encontrar, decidí agregar esta información.
Con respecto a su pregunta, si desea cambiar la tabla de ventas / pedidos, esto no debe hacerse mediante los scripts / instalación de instalación tradicionales. El
Mage_Catalogmódulo usa unaResource_Setupclase diferente , a saberMage_Sales_Model_Resource_Setup.Si desea agregar atributos al modelo de ventas / pedidos, para asegurarse de que todo se agrega y procesa correctamente, agregue su atributo de esta manera:
Si se pregunta por qué , entonces la respuesta está dentro de la
addAttribute()función de laMage_Sales_Model_Resource_Setupclase:fuente
addAttributepara el módulo Sales_Order$thisinstalador, su respuesta me indicó la dirección correcta. Muchas gracias!