¿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.xml
archivo 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_order
es el nombre completo detable
y, 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_order
porque
EDITAR
Puede usar el siguiente script para agregar una nueva columna. Funciona bien en mi sistema
Estoy usando
Varien_Db_Ddl_Table::TYPE_TEXT
instedVarien_Db_Ddl_Table::TYPE_VARCHAR
porqueTYPE_VARCHAR
está en desusoPuedes comprobar @
Varien_Db_Adapter_Pdo_Mysql::$_ddlColumnTypes
Y si especifica el tipo
TYPE_TEXT
pero establece la longitud para que digamos que255
Magento creará unaMySQL
columna deVARCHAR
tipo.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_Catalog
módulo usa unaResource_Setup
clase 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_Setup
clase:fuente
addAttribute
para el módulo Sales_Order$this
instalador, su respuesta me indicó la dirección correcta. Muchas gracias!