Вопрос

Я работаю над модулем, который требует доступа к некоторым табличным данным, предоставленным из внешнего источника. Это всего лишь два столбца, но имеет примерно 40000 строк.

В настоящее время мой модуль просто анализирует CSV полностью при необходимости. Это работает хорошо, но, поскольку файл составляет около 450 КБ, это будет съесть ресурсы сервера после развертывания на производственный сайт.

Я хотел бы перенести эти данные в таблицу Magento, и у меня проблемы.

Я использую методы RDBMS в моем сценарии настройки, 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();

Это отлично работает, чтобы создать мою таблицу, но на самом деле получение моих данных - это разорвать мою голову (я все еще нуб, когда дело доходит до управления базами данных).

В идеале я бы просто проанализировал свой файл CSV и вставил значения в таблицу без необходимости иметь дело с кучей копий/вставки.

Существуют ли какие-либо встроенные методы обработки произвольных данных CSV, или они все созданы, чтобы справиться только с тем, что им нужно? Как бы лучший подход для того, чтобы довести мои данные в Magento?

Это было полезно?

Решение

Никогда не делал этого. Давайте играть!

После createTable() позвонить или в последующем сценарии:

/* @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();
Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top