有没有办法添加自定义EAV属性,在创建新实体时自动将其设置为默认值?
我将eav_attribute.is_required
设置为1
,将eav_attribute.default_value
设置为0
(默认值),但在创建新对象时,它不会自动设置属性。
顺便说一下,EAV实体类型是shipment
。在销售数据存储在平面表中之前,我正在进行1.3.2.4的安装。
修改
Jonathan Day问“你如何添加属性?”
在ModuleDir \ sql \ module_setup \ mysql4-install-0.1.0.php中,我有以下代码:
$eav = new Mage_Eav_Model_Entity_Setup('sales_setup');
$eav->addAttribute('shipment', 'fieldname', array('type' => 'int'));
我还为Magento的更高版本提供了此代码(在销售实体从EAV转到平面表之后):
$w = $this->_conn;
$table = $this->getTable('sales_flat_shipment');
$w->addColumn($table, 'fieldname', 'int');
$w->addKey($table, 'fieldname', 'fieldname', 'index');
Jonathan Day问道“您是否检查过该属性是否已使用正确的字段添加到eav_attribute?”
是的,它已添加到eav_attribute中。该属性是可设置和可获取的。
答案 0 :(得分:3)
如果您查看Varien_Object::getData()
(在/lib/Varien/Object.php
中),您可以看到以下行:
$default = null;
...任何缺失数据的实例都会返回$default
。因此,您在属性中设置的默认值将被忽略。
由于任何未定义的'get'由getData()
处理,这意味着null
始终是默认值。似乎唯一的选择是覆盖Sales_Model_Order_Shipment
(或者它是哪个实体模型)并提供自定义getter。
一个简单的例子是:
function getSample()
{
if (!$this->hasSample())
return 0;
return $this->getData('sample');
}