4

我正在尝试在 Magento 1.7.0.0 中设置一个自定义实体,遵循alan Storms 关于它的文章,但是使用这个简单的安装脚本,它告诉我“无法创建表:eavblog_posts”。

我的安装脚本很简单,看起来像这样:

<?php
$installer = $this;
$installer->addEntityType('complexworld_eavblogpost',
Array(
'entity_model'=>'complexworld/eavblogpost',
'attribute_model'=>'',
'table'=>'complexworld/eavblogpost',
'increment_model'=>'',eav/entity_increment_numeric
'increment_per_store'=>'0'
));
$installer->createEntityTables(
$this->getTable('complexworld/eavblogpost')
);

我怎样才能让我的安装脚本工作?这是一个已知的 magento 错误吗?

4

2 回答 2

5

就我而言,问题是由于createEntityTables()Magento 1.7/1.12 中的方法存在错误

他们对这个错误报告的回答中,Magento 团队建议从 lib/Varien/Db/Adapter/Pdo/Mysql.php 中注释掉第 417 行:

$this->_checkDdlTransaction($sql);

相反,我建议遵循Zachary Schuessler 帖子中的建议,或者

1)将该方法复制createEntityTables()到您自己的文件(Your/Module/Model/Resource/Setup.php)并注释掉事务方法...

或者

2)编写抽象查询以保留事务:

// Example of MySQL API
/**
 * Create table array('catalog/product', 'decimal')
 */
$table = $installer->getConnection()
    ->newTable($installer->getTable(array('catalog/product', 'decimal')))
    ->addColumn('value_id', Varien_Db_Ddl_Table::TYPE_INTEGER, null, array(
        'identity'  => true,
        'nullable'  => false,
        'primary'   => true,
        ), 'Value ID')
    ->addColumn(...
于 2013-03-29T08:32:14.697 回答
1

首先,这一行是错误的:

'increment_model'=>'',eav/entity_increment_numeric

它需要在引号内。

最新版本的安装程序功能中存在一些错误。

使用 phpMyAdmin 或类似工具进入您的数据库并检查是否已存在任何表。如果有,请删除它们。同时删除模块在 core_resource 中的记录。

再试一次。

然后这里有一个步骤我不记得了(有用,我知道,但我今晚会试着记住它并编辑它)。

创建表后,如果您查看类型表(int、text char 等)的外键分配,您会注意到 entity_id 字段正在查看 eav_entity.entity_id。这需要更改为您的 eavblogpost_entity 表。

您可能还注意到 eavblogpost_entity.entity_id 字段是 INT(11),而所有外键引用都是 INT(10)。手动将 eavblogpost_entity.entity_id 字段更改为 INT(10)。

解决所有这些问题的唯一方法是用一个有效的方法覆盖 createEntityTables() 函数,或者手动创建所有表。这是一个很好的资源,可以帮助您完成这部分http://incho.net/ecommerce/magento/creating-an-eav-based-models-in-magento/

在你去的时候把所有这些弄得一团糟,我相信你会偶然发现我已经忘记的你必须做的步骤。对不起!

于 2012-05-09T07:31:36.390 回答