Magento:添加自定义EAV属性,该属性在实体创建时使用其默认值自动填充

时间:2010-12-01 19:49:09

标签: php magento default-value entity-attribute-value populate

有没有办法添加自定义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中。该属性是可设置和可获取的。

1 个答案:

答案 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');
}