Magento,以编程方式使用SQL在脚本中向产品添加类别

Jar*_*rod 5 php sql magento

我正在确定以编程方式将类别添加到产品的最佳方法.类别是从magento安装之外的第三方数据获得的,然后我解析这些数据并想要更新magento:"catalog_category_product"表,将找到的类别与其各自的产品相关联.

在"catalog_category_product"中将类别添加到产品关联作为测试后,该类别未显示在magento前端站点上.在进行了更多搜索之后,我在"catalog_category_product_index"表中添加了一个条目,该产品现在显示在前端站点上的正确类别中.

这一切都是必要的吗?我担心还有额外的magento事件挂钩绑定到产品和类别,他们可能正在更新我不知道的其他表.

我可以使用SQL向这两个表添加行而不会发生意外,或者我是否需要加载magento应用程序并通过EAV产品和类别模型执行此操作?我是在正确的轨道上吗?

更新

我实际上并没有"导入"任何新数据.产品和类别已在系统中就位.我还没有添加任何自定义观察者,并且正在使用vanilla Products和Categories模型.

我正在解析文本文件以获取正确的值,然后使用纯SQL UPDATE语句.

我只是想确保通过这条路线,我需要以编程方式更新的唯一表是'catalog_category_product'和'catalog_category_product_index'.

Ale*_*kov 4

我个人不建议您使用普通 SQL,而是使用 API,例如:

define('MAGENTO', realpath(dirname(__FILE__)));
require_once MAGENTO . '/app/Mage.php';
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);

// Load products 
$products = Mage::getModel('catalog/product')
            ->setStoreId(Mage_Core_Model_App::ADMIN_STORE_ID)
            ->getAll();

// Load categories
$category = Mage::getModel('catalog/category');
            ->setStoreId(Mage_Core_Model_App::ADMIN_STORE_ID);
$categories = $category->getAll();
foreach($products as $product) {
    // Get relevant category 
    $product->setCategoryIds(array($category->getId()));
    $product->save();
}
Run Code Online (Sandbox Code Playgroud)

上面的代码是非常粗略的示例,但只需进行一些调整就可以完成工作。如果您使用普通 SQL,您可能会面临破坏数据或关系的风险,但使用 Magento API 应该可以为您处理它。