4

起源...

我有一个带有安装脚本的模块(常见的mysql4-upgrade-0.1.0-0.1.1.php),在引用中添加了一个属性:

$eav = new Mage_Eav_Model_Entity_Setup('sales_setup');
$eav->addAttribute('quote', 'my_attribute', array('type' => 'varchar'));

如果我在空数据库上运行我的 magento 存储,设置脚本会运行,并且“错误的实体 ID”错误会中断该过程。调用堆栈指向我的设置脚本。

...寻找...

如果我去数据库,我看到eav_entity_type表填充但只有 8 种类型:报价类型未注册!

这就是 Mage_Eav_Model_Entity_Setup->getEntityTypeId() 抛出异常的原因。

问题:

我不知道为什么没有使用其他实体创建报价实体。如何在我的模块设置之前强制 magento 注册报价实体?有没有其他选择?

有一个可能相关的问题

4

1 回答 1

6

从 1.4.x 开始,所有实体都移入平面结构。但是,仍然可以使用 Mage_Sales_Model_Mysql4_Setup 类的伪 EAV 接口。您的代码不起作用,因为您使用的是 Eav 设置模型而不是销售模型。

此外,默认情况下,app/code/local/ 中的所有模块设置脚本仅在 app/code/core 中的脚本之后处理,因此您可以选择不指定对核心模块的依赖。

真诚的,伊万

于 2012-04-26T20:20:42.077 回答