Saltar al contenido

¿Cómo agregar una nueva columna a la tabla existente en Magento mediante programación?

Solución:

sales_flat_order es el nombre completo del table y entonces tienes que usar un alias en $installer->getTable()

En $installer->getTable() parámetro como module_alias/table_alias.

En ese caso, intente con

$installer->getTable('sales/order')

Cuando escriba esto, devolverá el nombre de la tabla sales_flat_order

porque

module_alias = sales

table_alias = order

EDITAR

Puede usar el siguiente script para agregar una nueva columna. Funciona bien en mi sistema

$installer = $this;
$installer->startSetup();

$installer->getConnection()
->addColumn($installer->getTable('sales/order'),'custom_value', array(
    'type'      => Varien_Db_Ddl_Table::TYPE_TEXT,
    'nullable'  => false,
    'length'    => 255,
    'after'     => null, // column name to insert new column after
    'comment'   => 'Title'
    ));   
$installer->endSetup();

estoy usando Varien_Db_Ddl_Table::TYPE_TEXT insted de Varien_Db_Ddl_Table::TYPE_VARCHAR porque TYPE_VARCHAR es obsoleto

Puedes comprobar @ Varien_Db_Adapter_Pdo_Mysql::$_ddlColumnTypes

Y si especificas el tipo TYPE_TEXT pero establezca la longitud para decir 255 Magento creará un MySQL columna de VARCHAR escribe.

Estás haciendo un mal uso del método addColumn:

public function addColumn($tableName, $columnName, $definition, $schemaName = null)

el cuarto parámetro es el nombre de esquema, en su llamada, el cuarto parámetro es 255.

->addColumn($installer->getTable('sales_flat_order'),'custom_value', Varien_Db_Ddl_Table::TYPE_VARCHAR, 255, array(
    'nullable'  => false,
), 'Title')

Si usa los parámetros correctos, debería funcionar.

Me doy cuenta de que esta es una pregunta relativamente “antigua”, pero como Google todavía puede encontrarla, 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 de instalación / configuración tradicionales. los Mage_Catalog el módulo utiliza un Resource_Setup clase, a saber Mage_Sales_Model_Resource_Setup.

Si desea agregar atributos al modelo de ventas / pedidos, para asegurarse de que todo se agregue y procese correctamente, agregue su atributo de esta manera:

<?php

// Start setup
/** @var Mage_Sales_Model_Resource_Setup $installer */
$installer = new Mage_Sales_Model_Resource_Setup('core_setup');
$installer->startSetup();

// Gather info
$entityType="order"; // Adding attribute to this entity type (must be written out in text, not the entity type ID!! That'll not work.
$attributeName="my_attribute_code"; // Your attribute code/name

// Add attribute, very few parameters are accepted.
$installer->addAttribute($entityType, $attributeName, array(
    'type'              => 'varchar'
));

// End setup
$installer->endSetup();

Deberías preguntarte por qué, entonces la respuesta está dentro del addAttribute() función de la Mage_Sales_Model_Resource_Setup clase:

/**
 * Add entity attribute. Overwrited for flat entities support
 *
 * @param int|string $entityTypeId
 * @param string $code
 * @param array $attr
 * @return Mage_Sales_Model_Resource_Setup
 */
public function addAttribute($entityTypeId, $code, array $attr)
{
    if (isset($this->_flatEntityTables[$entityTypeId]) &&
        $this->_flatTableExist($this->_flatEntityTables[$entityTypeId]))
    {
        $this->_addFlatAttribute($this->_flatEntityTables[$entityTypeId], $code, $attr);
        $this->_addGridAttribute($this->_flatEntityTables[$entityTypeId], $code, $attr, $entityTypeId);
    } else {
        parent::addAttribute($entityTypeId, $code, $attr);
    }
    return $this;
}
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *