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;
}