Pregunta

Estoy trabajando en un módulo que requiere el acceso a algunos datos tabulares proporcionados desde una fuente externa. Es sólo dos columnas, pero tiene aproximadamente 40.000 filas.

En la actualidad, mi módulo se acaba de analizar el CSV en totalidad cuando sea necesario. Esto funciona bien, pero puesto que el archivo es de 450Kb, esto va a comer a los recursos del servidor, una vez desplegados en un lugar de producción.

Me gustaría pasar estos datos a una tabla de Magento y estoy teniendo problemas.

Estoy usando los métodos de RDBMS en mi script de configuración, Ala:

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

$table = $installer->getConnection()
    ->newTable($installer->getTable('my_table'))
    ->addColumn('column_a', Varien_Db_Ddl_Table::TYPE_TEXT, 5, array(
        'nullable' => false,
        ), 'Column A')
    ->addColumn('column_b', Varien_Db_Ddl_Table::TYPE_TEXT, 3, array(
        'nullable' => false,
        ), 'Column B');

$installer->getConnection()->createTable($table);

$installer->endSetup();

Esto funciona muy bien para crear mi mesa, pero realmente conseguir mis datos en mi cabeza se arruina (todavía soy un novato cuando se trata de gestión de base de datos).

Lo ideal es que me acaba de analizar mi archivo CSV e insertar valores en la tabla sin tener que lidiar con un montón de copiar / pegar.

¿Hay alguna en los métodos integrados para el manejo de datos CSV arbitrarias, o están todos construidos para manejar justo lo que necesitan? ¿Cuál sería el mejor enfoque para obtener mis datos en Magento?

¿Fue útil?

Solución

Nunca hecho esto. Juguemos!

Después de la llamada createTable(), o en un script posterior:

/* @var $installer Mage_Core_Model_Resource_Setup */
$installer = $this;
$installer->startSetup();

//Extract data from CSV file
$csv = new Varien_File_Csv;
$data = $csv->getData('path/to/file.csv');

$resultNum = $installer->getConnection()->insertArray(
    $installer->getTable({TABLE NAME}),
    array({COL 1},{COL 2}),    //column names
    $data
);

//EDIT: if this is done using a data setup script, can even log the results:
Mage::log(
    __FILE__." added $resultNum records to $installer->getTable({TABLE NAME})",
    Zend_Log::INFO,
    "setup.log",
    true
);

$installer->endSetup();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top