2

有没有办法添加一个自定义 EAV 属性,该属性在创建新实体时自动设置为其默认值?

我设置eav_attribute.is_required了 to1eav_attribute.default_valueto 0(默认值),但是当我创建一个新对象时它没有自动设置属性。

顺便说一下,EAV 实体类型是shipment. 在销售数据存储在平面表中之前,我正在安装 1.3.2.4。

编辑

乔纳森戴问“你是如何添加属性的?”

在 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。并且该属性是可设置和可获取的。

4

1 回答 1

3

如果您查看Varien_Object::getData()(in /lib/Varien/Object.php),您可以看到以下行:

$default = null;

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

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

一个简单的例子是:

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

    return $this->getData('sample');
}
于 2011-01-06T21:17:20.447 回答