7

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

谢谢!

4

4 回答 4

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);
于 2013-01-10T06:37:58.163 回答
1

在这里,我将向您解释如何在 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);

?>

我希望它会帮助你。:)

于 2016-10-22T07:27:05.040 回答
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';

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

一切顺利。

于 2014-12-19T13:06:40.177 回答
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();
于 2015-10-23T14:51:26.853 回答