在进入细节之前,让我们先问清楚这个问题:
有没有办法hard删除属性value来自产品?
By hard我的意思是,从数据库中删除该行,而不仅仅是将值设置为 null 或空。
现在,详细信息:
我目前在 Magento 上遇到一个问题。
我商店中的许多产品都有与产品无关的用户定义属性。例如,假设我们有一个bag产品,以及其他产品,例如T 恤、连衣裙、裤子,etc.:
Our bag产品只有可配置的 1 个属性:color.
Our T-Shirt产品有 2 个可配置属性:color and T 恤尺寸.
Our Dress产品有 2 个可配置属性:color and 服装尺码
我当前的问题是当我检索我的Bag来自数据库的产品,存储在我的产品中的属性是:color, T 恤尺寸 and 服装尺码.
我怀疑这是因为在我们的商店中您可以更改产品的属性集(感谢 FlagBit ChangeAttributeSet 社区扩展)。
我认为袋子产品是用特定的属性集创建的,然后有人将属性集更改为另一个,然后又更改了另一个。这将导致产品从其已更改为的所有属性集中获取所有属性。但这只是一个原因,可能还有其他原因。实际上,我目前并没有寻找导致我的产品具有不相关属性的具体原因。
我今天想要reset我的产品。我所说的重置是指删除与我的产品无关的属性。就我的情况而言bag,这意味着删除T 恤尺寸 and 服装尺码属性。并由removing I mean 永久删除这些属性来自对象。
我的问题是,我找不到该怎么做。我尝试将属性设置为 NULL 并保存产品,但是当我再次查询产品时,我仍然在数据中获取该属性,且值为空。我不希望属性值为空,我希望属性不存在。
这是一个代码示例,解释了我尝试的一些内容:
$product = Mage::getModel('catalog/product')->load(1234); //Let's assume that my bag product ID is 1234
Mage::log($product->getData());
/* This last line dump all my products datas and contains among other things:
[...]=>...
[color]=>3
[tshirt_size]=>34
[dress_size]=>45
[...]=>...
*/
如果我做一个:
$product->setData('tshirt_size',null);
$product->setData('dress_size',null);
$product->save();
然后再说一遍:
$product = Mage::getModel('catalog/product')->load(1234);
Mage::log($product->getData());
/* I get:
[...]=>...
[color]=>3
[tshirt_size]=>null
[dress_size]=>null
[...]=>...
*/
我不想那样。我想:
/*
[...]=>...
[color]=>3
[...]=>...
*/
事实上,我的数组中仍然有条目,这意味着数据库中的实际行不会被删除。我想要删除这些行。
更令人沮丧的是,当我执行以下操作时:
$product->getAttributes();
它返回我可以为我的产品设置的所有属性without不相关的属性 - 这是有道理的,因为不相关的属性不在我的产品的属性集中。
那么,问题又是:
有没有办法hard删除属性value来自产品?
By hard我的意思是,从数据库中删除该行,而不仅仅是将值设置为 null 或空。
感谢您的帮助!
Hugues.
仅供参考:我正在使用 Magento 1.6.1.0 (但它并没有真正改变任何东西)