2010-12-01 67 views
2

有没有方法添加自定义EAV属性,创建新实体时自动设置为其默认值?Magento:添加一个自定义的EAV属性,使用其缺省值自动创建实体创建

我设置eav_attribute.is_required1eav_attribute.default_value0(默认值),但是当我创建一个新的对象它不会自动设置该属性。

顺便说一句,EAV实体类型是shipment。在销售数据存储在平面表格之前,我正在进行1.3.2.4的安装。

编辑

乔纳森天问“你怎么加属性?”

在ModuleDir \ SQL \ module_setup \ mysql4安装-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'); 

乔纳森天问“你有没有检查该属性添加正确的领域eav_attribute?”

是的,它已被添加到eav_attribute。该属性是可设置的并且可以获取。

+0

你是如何添加属性?在一个SQL设置文件或扩展`Mage_Eav_Model_Entity_Setup` ?.你有没有检查过该属性是添加到`eav_attribute`与正确的字段? – 2010-12-02 02:50:22

回答

3

如果你看看Varien_Object::getData()(在/lib/Varien/Object.php),你可以看到下面一行:

$default = null; 

...和缺失数据的任何实例返回$default。因此,您在属性中设置的默认值将被忽略。

由于任何未定义的'get'由getData()处理,这意味着null将始终是默认值。似乎唯一的选择是覆盖Sales_Model_Order_Shipment(或任何实体模型)并提供自定义获取者。

一个简单的例子是:

function getSample() 
{ 
    if (!$this->hasSample()) 
     return 0; 

    return $this->getData('sample'); 
} 
相关问题