2

我完成了有关 Magento 设置资源的本教程。

在某些时候,我看到它支持更多的数据库后端,但在提到的教程中只描述了创建表的方式。

我需要一些关于将(不可知脚本)数据插入到先前创建的表中的方法的资源/示例

4

2 回答 2

3

就像 Magento(和开源)的所有东西一样,最好的办法是看看其他开发人员,特别是 Magento 核心开发人员是如何做同样的事情的。这里有几个例子

#File: app/code/core/Mage/Tax/sql/tax_setup/mysql4-upgrade-0.7.2-0.7.3.php
$installer = $this;
/* @var $installer Mage_Core_Model_Resource_Setup */

$installer->startSetup();

if (!$installer->getConnection()->fetchOne("select * from {$this->getTable('tax_class')} where `class_name`='Shipping' and `class_type`='PRODUCT'")) {
    $installer->run("
        insert  into {$this->getTable('tax_class')} (`class_name`,`class_type`) values ('Shipping','PRODUCT');
    ");
}

$installer->endSetup();

...

#File: app/code/core/Mage/Sales/sql/sales_setup/mysql4-upgrade-0.8.29-0.9.0.php
$installer->getConnection()->insert($installer->getTable('sales_flat_quote'), $quoteData);

您基本上是针对数据库运行原始 SQL,因此您将负责(即开发人员的责任)保持它足够通用以在各种 SQL(MySQL、SQL Server、Oracle 等)环境中运行。

我不建议在设置资源中使用标准 Magento 模型。Magento 运行这些迁移脚本的上下文与模型通常运行的上下文不匹配。您可能能够摆脱它,但是如果模型对完全自举的 Magento 系统。

您可以通过一些搜索自己找到更多示例。如果你精通命令行,试试这个

$ cd app/code/core/Mage
$ find . -type f -wholename '*/sql/*'  | xargs grep -i -r insert 
$ find . -type f -wholename '*/sql/*'  | xargs ack -i insert       #if you use ack
于 2012-11-13T00:34:14.440 回答
1

您应该使用相应的模型来插入数据。示例来自app/code/core/Mage/Dataflow/data/dataflow_setup/data-install-1.6.0.0.php

$dataflowData = array(
    array(
        'name'         => 'Export All Products',
        'actions_xml'  => '<action type="catalog/convert_adapter_product" method="load">\r\n    <var name="store"><![CDATA[0]]></var>\r\n</action>\r\n\r\n<action type="catalog/convert_parser_product" method="unparse">\r\n    <var name="store"><![CDATA[0]]></var>\r\n</action>\r\n\r\n<action type="dataflow/convert_mapper_column" method="map">\r\n</action>\r\n\r\n<action type="dataflow/convert_parser_csv" method="unparse">\r\n    <var name="delimiter"><![CDATA[,]]></var>\r\n    <var name="enclose"><![CDATA["]]></var>\r\n    <var name="fieldnames">true</var>\r\n</action>\r\n\r\n<action type="dataflow/convert_adapter_io" method="save">\r\n    <var name="type">file</var>\r\n    <var name="path">var/export</var>\r\n    <var name="filename"><![CDATA[export_all_products.csv]]></var>\r\n</action>\r\n\r\n',
        'gui_data'     => 'a:5:{s:4:"file";a:7:{s:4:"type";s:4:"file";s:8:"filename";s:23:"export_all_products.csv";s:4:"path";s:10:"var/export";s:4:"host";s:0:"";s:4:"user";s:0:"";s:8:"password";s:0:"";s:7:"passive";s:0:"";}s:5:"parse";a:5:{s:4:"type";s:3:"csv";s:12:"single_sheet";s:0:"";s:9:"delimiter";s:1:",";s:7:"enclose";s:1:""";s:10:"fieldnames";s:4:"true";}s:3:"map";a:3:{s:14:"only_specified";s:0:"";s:7:"product";a:2:{s:2:"db";a:0:{}s:4:"file";a:0:{}}s:8:"customer";a:2:{s:2:"db";a:0:{}s:4:"file";a:0:{}}}s:7:"product";a:1:{s:6:"filter";a:8:{s:4:"name";s:0:"";s:3:"sku";s:0:"";s:4:"type";s:1:"0";s:13:"attribute_set";s:0:"";s:5:"price";a:2:{s:4:"from";s:0:"";s:2:"to";s:0:"";}s:3:"qty";a:2:{s:4:"from";s:0:"";s:2:"to";s:0:"";}s:10:"visibility";s:1:"0";s:6:"status";s:1:"0";}}s:8:"customer";a:1:{s:6:"filter";a:10:{s:9:"firstname";s:0:"";s:8:"lastname";s:0:"";s:5:"email";s:0:"";s:5:"group";s:1:"0";s:10:"adressType";s:15:"default_billing";s:9:"telephone";s:0:"";s:8:"postcode";s:0:"";s:7:"country";s:0:"";s:6:"region";s:0:"";s:10:"created_at";a:2:{s:4:"from";s:0:"";s:2:"to";s:0:"";}}}}',
        'direction'    => 'export',
        'entity_type'  => 'product',
        'store_id'     => 0,
        'data_transfer'=> 'file'
    ),
    // ... 
);

foreach ($dataflowData as $bind) {
    Mage::getModel('dataflow/profile')->setData($bind)->save();
}
于 2012-11-12T21:09:29.767 回答