Magento eav实体设置失败 - 无法创建表

时间:2012-05-08 02:46:37

标签: magento entity-attribute-value

我正在尝试在alan storms article about it之后在Magento 1.7.0.0中设置自定义实体,但是通过这个简单的安装脚本,它告诉我"无法创建表:eavblog_posts&# 34。

我的安装脚本非常简单,如下所示:

<?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 bug吗?

2 个答案:

答案 0 :(得分:5)

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

their answer to this bug report中,Magento团队建议从lib / Varien / Db / Adapter / Pdo / Mysql.php中注释掉第417行:

$this->_checkDdlTransaction($sql);

相反,我建议关注the advice in Zachary Schuessler's post

1)将createEntityTables()方法复制到您自己的文件(您的/ 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(...

答案 1 :(得分:1)

首先,这一行是错误的:

'increment_model'=>'',eav/entity_increment_numeric

它需要在引号内。

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

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

再试一次。

然后在这里迈出了一步我无法记住我的头脑(很有用,我知道,但我今晚会尝试记住它并编辑它)。

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

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

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

当你走的时候把所有这些弄乱,我相信你会偶然发现你必须做的那一步我已经忘记了。遗憾!