我有一个包含数千个选项的属性。这些选项是由一个脚本以编程方式创建的,该脚本从一个提要中导入我的所有产品。该网站运行速度很慢,所以我想我会摆脱所有过时的选项。问题是我无法从 magento 管理员加载编辑页面。如何使用 MySQL 查询识别属性选项?或者如何以编程方式删除所有属性选项?
谢谢!
我有一个包含数千个选项的属性。这些选项是由一个脚本以编程方式创建的,该脚本从一个提要中导入我的所有产品。该网站运行速度很慢,所以我想我会摆脱所有过时的选项。问题是我无法从 magento 管理员加载编辑页面。如何使用 MySQL 查询识别属性选项?或者如何以编程方式删除所有属性选项?
谢谢!
这将为您提供所有选项的列表
$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);
在这里,我将向您解释如何在 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);
?>
我希望它会帮助你。:)
这是一个查询,它显示了与所涉及的表的关系。我希望这有帮助。您可以通过这种方式为每个商店视图单独获取它们。
要将标签获取到属性的存储视图(或存储在这些表中的任何其他内容),请使用:
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';
我知道这不是删除值的方法,但也许它可以帮助您确定获取所需数据集的方法。
一切顺利。
我就是这样做的
// 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();