我有一个拥有数千个选项的属性。 这些选项由脚本以编程方式创建,该脚本从Feed导入所有产品。 该网站运行速度很慢,所以我想我将摆脱所有过时的选项。 问题是我无法从magento管理员加载编辑页面。 如何使用MySQL查询识别属性选项? 或者如何以编程方式删除所有属性选项?
谢谢!
答案 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);
?>
我希望它会对你有所帮助。 :)