2010-12-01 62 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'); 
} 
相關問題