Magento删除属性值/选项MySQL

时间:2013-01-10 03:51:43

标签: mysql magento attributes

我有一个拥有数千个选项的属性。 这些选项由脚本以编程方式创建,该脚本从Feed导入所有产品。 该网站运行速度很慢,所以我想我将摆脱所有过时的选项。 问题是我无法从magento管理员加载编辑页面。 如何使用MySQL查询识别属性选项? 或者如何以编程方式删除所有属性选项?

谢谢!

4 个答案:

答案 0 :(得分:10)

这将为您提供所有选项的列表

$attribute_code = 'color';
$attribute = Mage::getModel('eav/config')->getAttribute('catalog_product',$attribute_code);
$options = $attribute->getSource()->getAllOptions();

这允许您更新属性并删除选项

$options['delete'][$option_id] = true; 
$options['value'][$option_id] = true;

$options['delete'][$another_option_id] = true; 
$options['value'][$another_option_id] = true;

// (...)

$setup = new Mage_Eav_Model_Entity_Setup('core_setup');
$setup->addAttributeOption($options);

答案 1 :(得分:0)

这是一个查询,显示与已调用的表的关系。我希望这有帮助。您可以通过这种方式单独为每个商店视图获取它们。

要将标签提取到属性的商店视图(或存储在这些表中的任何其他内容),请使用:

SELECT 
    EA.attribute_id,
    EA.entity_type_id,
    EA.attribute_code,
    EAL.value AS label
FROM `magento_eav_attribute` AS EA
    INNER JOIN `magento_eav_attribute_option` 
        AS EAO  ON EAO.attribute_id = EA.attribute_id
    INNER JOIN `magento_eav_attribute_label` 
        AS EAL ON EAL.attribute_id = EA.attribute_id
WHERE 
    EAL.store_id = 0 AND
    EA.attribute_code = 'color' LIMIT 0,1';

要获取与您的选项相关的选项值,请使用以下内容:

SELECT * 
    FROM `magento_eav_attribute_option_value` 
    WHERE store_id = 0 
       AND option_id = YOUR_OPTION_ID;

或者使用一些连接直接连接这些表

SELECT
      EA.attribute_id,
      EA.entity_type_id,
      EA.attribute_code,
      EAOV.option_id,
      EAOV.value_id,
      EAOV.value,
      EAL.value AS label
      FROM `magento_eav_attribute` AS EA
      INNER JOIN `magento_eav_attribute_option` 
          AS EAO  ON EAO.attribute_id = EA.attribute_id
      INNER JOIN `magento_eav_attribute_option_value` 
          AS EAOV  ON EAOV.option_id = EAO.option_id
      INNER JOIN `magento_eav_attribute_label` 
          AS EAL ON EAL.attribute_id = EA.attribute_id
  WHERE
  EAOV.store_id = 0 AND
  EAOV.option_id = YOUR_OPTION_ID AND
  EAL.store_id = '0' AND
  EA.attribute_code = 'color';

我知道这不是删除您的值的方法,但也许它可以帮助您确定获取所需数据集的方法。

一切顺利。

答案 2 :(得分:0)

这就是我这样做的方式

// Deleting attribute options by GUID

$setup = new Mage_Eav_Model_Entity_Setup('core_setup');
$attribute  = Mage::getSingleton("eav/config")->getAttribute("customer", "position");

//Values have to be deleted one at a time
// Eav Setup.php
$updates = array();
foreach ($attribute->getSource()->getAllOptions() as $option) {
        $update['value'] = array();
        $update['delete'][$option['value']] = true;
        $update['attribute_id'] = $attribute->getId();
        $update['value'][$option['value']] = true;
        $updates[] = $update;
}

$setup->addAttributeOption($updates);
die();

答案 3 :(得分:0)

在这里,我向您解释如何在magento中以编程方式删除所有属性选项值。您还可以从magento的管理面板中删除属性选项值,但是如果有很多属性选项值,那么从管理员中删除需要花费很多时间,因此您可以在magento中以编程方式添加属性选项值。为此,您只需要在magento根文件夹中创建deleteattributeoptions.php文件,在其中添加以下代码并将 ATTRIBUTE_CODE_HERE 替换为您的属性代码。

<?php

require_once 'app/Mage.php';$app = Mage::app('admin');umask(0);
$attribute_code = 'ATTRIBUTE_CODE_HERE';
$attribute = Mage::getModel('eav/config')->getAttribute('catalog_product', $attribute_code);
$options = $attribute->getSource()->getAllOptions();
$optionsDelete = array();
foreach($options as $option) {
if ($option['value'] != "") {
$optionsDelete['delete'][$option['value']] = true;
$optionsDelete['value'][$option['value']] = true;
}
}
$installer = new Mage_Eav_Model_Entity_Setup('core_setup');
$installer->addAttributeOption($optionsDelete);

?>

我希望它会对你有所帮助。 :)