1

我创建了一个安装脚本,使用下面的脚本向客户添加两个字段。

但我得到这个错误。

Source model "" not found for attribute "dob_month"

我不是在第一行定义模型吗?那实际上是做什么的?解决此问题的最佳方法是什么?

$setup = new Mage_Eav_Model_Entity_Setup('core_setup');


$setup->addAttribute('customer', 'dob_month', array(
    'label'     => 'Month',
    'type'      => 'varchar',
    'input'     => 'dropdown',
    'visible'   => true,
    'required'  => true,
    'position'  => 1,
    'option'    => array (
        'value' => array (
            'optionone'    => array('January'),
            'optiontwo'    => array('February'),
            'optionthree'  => array('March'),
            'optionfour'   => array('April'),
            'optionfive'   => array('May'),
            'optionsix'    => array('June'),
            'optionseven'  => array('July'),
            'optioneight'  => array('August'),
            'optionnine'   => array('September'),
            'optionten'    => array('October'),
            'optioneleven' => array('November'),
            'optiontwelve' => array('December')
        )
    )
));

$setup->addAttribute('customer', 'dob_year', array (
    'label'     => 'Year',
    'type'      => 'varchar',
    'input'     => 'text',
    'visible'   => true,
    'required'  => true,
    'position'  => 1
));
4

2 回答 2

5

如果您已经添加了该属性,您将希望用于updateAttributeeav_attribute表中设置源模型值。

<?php

$installer = Mage::getResourceModel('customer/setup','default_setup');
/***
 * When working with EAV entities it's important to use their module's setup class.
 * See Mage_Customer_Model_Resource_Setup::_prepareValues() to understand why.
 */

$installer->startSetup();

$installer->updateAttribute(
    'customer',
    'dob_month',
    'source_model', //a.o.t. 'source'
    'whatever/source_model',
)

$installer->endSetup();

如果没有,那么您可以使用addAttribute(),由于Mage_Eav设置类的_prepareValues()方法,它需要 source_model 列的别名,如 Alexei 的回答中所示('source' 而不是 'source_model')。

于 2012-08-22T01:24:02.027 回答
3

当 Magento 需要知道您的属性的可能值时,使用源模型。例如,在为您的属性呈现下拉列表时。所以不,你没有定义它。如果我的记忆没有让我失望,您可以通过将“源”添加到属性定义数组来做到这一点。就像是:

...
'source' => 'eav/entity_attribute_source_table'
...

这意味着所有可能的选项都存储在表 eav_attribute_option 和 eav_attribute_option 中。因此,如果您的安装脚本选项成功添加到这些表中,那应该可以工作。或者您可以编写自己的源模型,我更喜欢它。

于 2012-08-21T21:45:58.030 回答